扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
说先说:你的代码有错误,在最下面,我已经该过了,不是大问题。
创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:网站设计制作、成都网站设计、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的蔡家坡网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
如果你想学好java的话,可以根据这个代码加上我的注解去理解,但不要学这个代码的变成方式或者说变成习惯,这个代码基本上无误,但犯了一些常识性问题,如果养成了这些不好的习惯对以后的编程会有坏的影响。
我是英文学的java,所以有些注解可能不通顺,但我尽力而为了。 有的注解有点长,所以你复制到编译器后稍微编辑一下就可以运行。代码是可以运行,没有问题的。
------------------------------------
import javax.swing.*; //用来创建图形界面,如窗口,表格,按钮等。
import java.awt.*; //作用同上,但已经很少用,能用swing的地方就不要用awt
import java.awt.event.*;//事件管理和控制
import java.sql.*; //数据库语句和操作
import java.lang.System;//这个不知道
/*下面的这6个没有用,纯属写出来吓人*/
import javax.swing.tree.*;
import javax.swing.event.*;
import java.util.*;
import javax.swing.border.*;
import javax.swing.table.*;
import java.lang.String.*;
class Mywindow extends JFrame implements ActionListener//这个类implements actionlistener,意思就是它自己就可以执行actionListener的任务
{
JTextField txf=new JTextField(20); //建一个文字编辑框,长度20(只可以输入一行文字)
JTextArea jt=new JTextArea(10,30);//建一个文字编辑区域,长10宽30(可以回车然后输入多行文字)
JButton btn1=new JButton("查询");//建一个 查询 按钮
Mywindow()//构造函数,每个类必有的,可以为空
{
JFrame frm=new JFrame("Search");//建一个窗口(让其他的东西有地方可放,和容器一样。是3个最高级别的容器之一,其他两个是applet和window)
frm.setBounds(400,300,450,350);//设置大小和位置,前两个是坐标,后两个是大小
Container con=getContentPane();//建一个awt容器对象,用来添加其他元素,最好用这个添加元素。像:frm.add(all); 可以写成 con.add(all);
JPanel pnl4=new JPanel();//建一个面板用来添加其他元素(第二级别容器,最后需要被添加在frame上)
pnl4.setBorder(BorderFactory.createTitledBorder("Search"));//设置边框样式
pnl4.add(txf);//把文字编辑框添加到面板上
pnl4.add(btn1);//把按钮添加到面板上
btn1.addActionListener(this);//添加事件行为监听器(this),this意思是当前对象,呼应 implements ActionListener
JPanel pnl5=new JPanel();//同上
pnl5.setBorder(BorderFactory.createTitledBorder("Result"));//同上
jt.setWrapStyleWord(true);//这个忘了
jt.setLineWrap(true);//在区域规定的宽度下,如果文字的输入到一行最后则会自动令其一行继续,如果是(false),文字输入就会在这一行继续知道回车
pnl5.add(new JScrollPane(jt));//个这个面板添加右侧滚动条,当文字输入超过 长* 宽后 滚动条出现
JPanel all=new JPanel();//同上
all.setLayout(new BorderLayout());//设置布局,borderlayout()分东西南北(上下左右)中五个部分 无论窗口多大,中间占得面积最大
all.add(pnl4,BorderLayout.NORTH);//添加一个面板在上面
all.add(pnl5,BorderLayout.CENTER);//添加一个在中间
frm.add(all);//把最大的这个面板添加到窗口上 也可以用con.add(all);
frm.setVisible(true);//设置窗口显示属性 如果false就是不显示
frm.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});//加一个窗口监听 如果点小红叉关闭窗口则系统推出
}
public void actionPerformed(ActionEvent e)//作为ActionListener类的构造函数,如果你的class implements ActionListenser, 那就必须得有这个,也可以单独写一个class,不过有点麻烦
{
if(e.getSource()==btn1)//当按钮被点击的时候
{
String str="";//建一个字符串
String tmp=this.txf.getText();//同上,这个字符串的值是当前对象(窗口)中,文本框输入的值
for(int k=0;ktmp.length();k++)//建一个 永久循环
str+=tmp.charAt(k)+"%";//把 % 插入每一个字符后面, 作用后面说
String sql=null;//同上
Statement stmt=null;//定义一个stmt,用来建数据库连接的
sql="select * from chinese where charsound like'"+str+"'";//创建一个sql数据库语句,但它本身还是一个字符串
System.out.println(sql);//系统显示创建的语句,通常找错时候用的
try{//try 和 catch 的作用一句两句说不清楚 不知道你就自己查查
Class.forName("com.mysql.jdbc.Driver");//或者:Class.forName("org.gjt.mm.mysql.Driver");关联mysql数据库驱动
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost/japan?user=rootpassword=sa");//建立连接,数据库名japan(为什么不是chinese?)用户名root密码sa
stmt=conn.createStatement();//建立statement对象,用来发送sql语句到数据库
ResultSet rs=stmt.executeQuery(sql);//运行语句并建立一个查询结果的集合
System.out.println("\n------------------------search :"+str+"-------------------------------");//同上
jt.setText("");//清空文本编辑区域
while(rs.next())//while循环,当还有结果的时候,把所有查询结果添加加到文本编辑区域中
{
jt.append(new String(rs.getString("charname").getBytes("iso-8859-1"),"gb2312")+"\t");
System.out.print(new String(rs.getString("charname").getBytes("iso-8859-1"),"gb2312")+"\t");
}
stmt.close();//关闭关连,很重要。
}
catch(Exception eq){System.out.println("error");}
//--------------------------------------------------------------end btn1-------
}
}
public static void main(String args[])
{
Mywindow win=new Mywindow();//建立一个 mywindow 对象
win.pack();//将所有元素整合
win.show();
}
}
补充:我没有ACCESS,我用的是odbc直接连接mdb文件,你可以用ACCESS同时操作mdb文件.如果要用到ACCESS,请修改bean中的属性值.
你的东西做的很好
只是数据库连接出了问题
这是我为你的工程写的一个关于数据库的bean
提供了一系列的数据操作方法
该类已经测试成功,只要添加到你的工程里就可以了。希望对你有用。
package lg_cidian;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* 数据库操作的JavaBean类,用于对数据库的查询与更新的实现;
* 该类默认的连接的数据库为odbc连接本地数据文件;
* 该类主要为用户一系列的数据操作提供底层服务.
*
* @version 1.0 2010/06/13
* @author Kiwwor
* @see UserData
*/
public class Access {
//驱动程序类
private String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
//连接数据库url
private String connectionUrl="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)}; DBQ=en.mdb";
//用户名
private String user = "";
//用户密码
private String password = "";
//数据库连接对象
private Connection connection = null;
//数据库对象
private Statement statement = null;
//数据集对象
private ResultSet resultSet = null;
public String getDriver() {
return driver;
}
public void setDriver(String driver) {
this.driver = driver;
}
public String getConnectionUrl() {
return connectionUrl;
}
public void setConnectionUrl(String connectionUrl) {
this.connectionUrl = connectionUrl;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Connection getConnection() {
return connection;
}
public void setConnection(Connection connection) {
this.connection = connection;
}
public Statement getStatement() {
return statement;
}
public void setStatement(Statement statement) {
this.statement = statement;
}
public ResultSet getResultSet() {
return resultSet;
}
public void setResultSet(ResultSet resultSet) {
this.resultSet = resultSet;
}
/**
* 获取一个连接对象,默认连接对象本地数据库qq。
* @return 连接是否成功
*/
public boolean createConnection() {
boolean b = false;
try {
Class.forName(driver);
connection = DriverManager.getConnection(connectionUrl, user, password);
b = true;
} catch (Exception e) {
e.printStackTrace();
}
return b;
}
/**
* 更新数据库
* @param sql 更新的sql语句
* @return 更新是否成功
*/
public boolean update(String sql) {
boolean b =false;
try {
statement = connection.createStatement();
statement.execute(sql);
b = true;
} catch (Exception e) {
e.printStackTrace();
}
return b;
}
/**
* 执行查询,将查询的结果集给resultmentSet。
* @param sql 查询的sql语句
*/
public void query(String sql) {
try {
statement = connection.createStatement();
resultSet = statement.executeQuery(sql);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 检测结果集是否为空
* @return true为存在记录
*/
public boolean next() {
boolean b = false;
try {
if (resultSet.next()) b = true;
} catch (Exception e) {
e.printStackTrace();
}
return b;
}
/**
* 获得结果集中当前行columnLabel的记录
* @param columnLabel 当前行要查询的列名.
* @return 查询的列值
*/
public String getValue(String columnLabel) {
String value = null;
try {
if (resultSet != null) value = resultSet.getString(columnLabel);
} catch (Exception e) {
e.printStackTrace();
}
return value;
}
/**
* 获得结果集中当前行columnIndex的记录
* @param columnIndex 当前行查询的列索引,第一列为1,第二列为2...
* @return 查询的列值
*/
public String getValue(int columnIndex) {
String value = null;
try {
if (resultSet != null) value = resultSet.getString(columnIndex);
} catch (Exception e) {
e.printStackTrace();
}
return value;
}
/**
* 关闭连接对象
*/
public void closeConnection() {
try {
if (connection != null) connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 关闭数据库对象
*/
public void closeStatement() {
try {
if (statement != null) statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 关闭结果集
*/
public void closeResultSet() {
try {
if (resultSet != null) resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 关闭数据连接对象,数据库对象和数据结果集对象。
*/
public void closeAll() {
closeResultSet();
closeStatement();
closeConnection();
}
/**
* 测试该类函数。
* @param args
*/
public static void main(String[] args) {
Access db = new Access();
if (db.createConnection()) {
System.out.println("测试数据库连接成功.");
}
db.closeAll();
}
}
下面是一个代码你可以看一下,答案就在其中
import java.util.regex.*;
public class Test {
public static void main(String[] args) {
String re0 = "[零一二三四五六七八九十百千]";
String re1 = "\\d+-\\d+-?\\d*-?\\d*|"+re0+"+-"+re0+"+-?"+re0+"*-?"+re0+"*";//存在 3-3(3-3-3、3-3-3-3)
String re2 = "\\d+号|"+re0+"+号";//存在3/三号
String re3 = "\\d+-\\d+-?\\d*-?\\d*号|"+re0+"+-"+re0+"+-?"+re0+"*-?"+re0+"*号";//存在3-33-3(3-3-3、3-3-3-3)号
String re4 = "\\d+号?[栋弄幢楼座]|"+re0+"+号?[栋弄幢楼座]";
String re10 = "[省市乡县村屯区巷街路道]$";//以村等结尾
String str1 = "香港吉祥二十号";
System.out.println(re1);
Pattern pattern = Pattern.compile(re2);
Matcher matcher = pattern.matcher(str1);
boolean rs = matcher.find();
System.out.println(rs);
}
}
Java规定了字符的内码要用UTF-16编码,一个字符是2个字节。外码字符所占字节取决于具体编码。字符和字节是不一样的。
外码编码不同,字符和字节的换算不同,几种常见的编码换算如下:
ASCII编码是单字节编码,只有英文字符,不能编码汉字。
GBK编码1个英文字符是1个字节,一个汉字是是2个字节。
UTF-8编码1个英文字符是1个字节,一个汉字是3个字节。
Unicode编码1个英文字符是2个字节,一个汉字是2个字节。
扩展资料:
汉字编码的困难点 汉字进入计算机,有许多困难,其原因主要有三点:
①数量庞大:一般认为,汉字总数已超过6万个(包括简化字)。虽有研究者主张规定3000多或4000字作为当代通用汉字,但仍比处理由二三十个字母组成的拼音文字要困难得多。
②字形复杂:有古体今体,繁体简体,正体异体;而且笔画相差悬殊,少的一笔,多的达36笔,简化后平均为9.8笔。
③存在大量一音多字和一字多音的现象:汉语音节416个,分声调后为1295个(根据《现代汉语词典》统计,轻声39个未计)。以1万个汉字计算,每个不带调的音节平均超过24个汉字,每个带调音节平均超过7.7个汉字。有的同音同调字多达66个。一字多音现象也很普遍。
参考资料来源:百度百科-编码
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流