下午花了一下午的时间将java连接数据库的知识学了个差不多了,
刚开始我循着以前的思想,以前用c#连接操作sqlserver的经验,去理解java的数据库连接,发现差不多的思想,心里窃喜。。。嘿嘿看来不难嘛
然后在百度知道找到了别人问的问题,有人也给出了个答案,我就试着对着那人的说法,自己一字一句的敲下来,慢慢的理解,修改,然后完成了我自己的第一个jdbc数据库操作底层。当然,刚开始的时候因为以前只做过SQLserver的,所以也写的是sqlserver的连接,在之后学MYSQL。
代码如下:
- package
com.prince; - import
java.sql.*; - public
class jdbcconn{ - Connection
conn=null; - String
url="jdbc:microsoft:sqlserver://127.0.0.1:1433;user=sa;password=123456;database=mydb"; - //构造函数加载驱动
- public
jdbcconn{ - try
{ - Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
- }
- catch(Exception
e){ - System.out.println(e.getMessage());
- }
- }
- //EQ方法用于查询数据库,返回结果集类型
- public
ResultSet EQ(String SQL){ - ResultSet
rs=null; - try{
- conn=DriverManager.getConnection(url);
- Statement
stmt=conn.creatStatement(); - rs=stmt.executeQuery(SQL);
- }
- catch(Exception
e){ - }
- return
rs; - }
- //UP用于更新修改数据库,返回int类型数据,表示影响到的行数
- public
int UP(String SQL){ - int
rs=0; - try{
- conn=
DriverManager.getConnection(); - Statement
stmt=conn.creatStatement(); - rs=stmt.executeQuery(SQL);
- }
- catch(Exception
e){} - return
rs; - }
- //关闭数据库连接
- public
void close(){ - try{
- conn.close();
- }
- catch(Exception
e){ - }
- }
- }
做到这里,我就有些比较懂了,其实和我以前用c#连接数据库是一样的,然后我发现我学的很快,呵呵,再然后我就去看JAVA连接MYSQL的了,
发现其实也差不多,那我就直接开始做了,首先要做的是拥有MYSQL,这个。。。以前玩网单的时候,看人家的apache+MYSQL,那叫一个羡慕啊。。。。今天我也来做个底层!!
首先去了百度搜索MYSQL,然后去官网下了个最新的包和驱动JRE,包170多兆。。。。啥来着。。这么大,安装完后才发现原来包括MYSQL+各种驱动+一个图形管理GUI的界面,以前我看MYSQL的数据库都是用的其他的软件查看的,像什么Navicat
接着就是使用myeclipse创建个java工程,创建个LIB文件夹,将
mysql-connector-java-5.1.24-bin.jar
然后创建了个类,开始编写MYSQL数据库访问底层函数,这个,当然我需要参考下网友发的那些方法了,然后总结自己的方法,找出一些问题。
大概遇到并解决的问题如下了:
1.刚开始遇到的问题是关于关键字URL的,我刚开始使用和sqlserver一样的URL,稍稍改了下,然后发现方法不对头,百度了下,发现使用那个有三个参数的方法更好:
- Connection
conn=null; - String
url="jdbc:MySQL://192.168.1.105:3306/mydb"; - String
account="root"; - String
password="123456"; - conn=DriverManager.getConnection(url,account,password);
这样测试后连接才正确了,虽然我也没法确定是我用法的原因还是什么,但是通过看myeclipse给的方法提示,我还是能看懂用哪个好的。
2.接下来,遇到的问题是关于驱动加载的,也是字段的问题,这次是大小写的问题,在:
Class.forName("com.mysql.jdbc.Driver"); 这句中MYSQL我之前用的是大写,测试了多遍,总没有通过,然后百度,发现一些人用的是小写,然后我改了再测试了下,发现的确是小写,这是我疏忽了。
3.之后在完善了查询底层的返回值后,我测试了查询的语句,没有问题,查询的到东西,这时候基本上可以说我成功了大半,剩下的就是将查询的数据经过整理,存储,调用之类的,在之后就是完成除了查询的,增加,更新,删除,不过我有经验,知道后面几种都只是语句的问题,它们使用同一种方法就可以。接下来我就遇到了最严重的一个错误,那就是方法的用错!
一直以为使用rs=stmt.executeQuery(SQL); 不仅可以查询,还可以实现其他功能,随着一次次的测试失败,我才醒悟。。。。我傻了半天啊,查询怎么可能和其他会修改数据的方法相同啊。。。。 经过仔细的阅读Statement对象的各个方法,发现executeQuery的确是查询,但是返回的是对象,不是我想当然的以为的返回的受影响的行数,整数。有很多的关于更新操作的方法,executeQuery
下面给出代码:
mySqlConnection.java:
- package
com.prince; - import
java.sql.*; - public
class mySqlConnection { - Connection
conn=null; - String
url="jdbc:MySQL://192.168.1.105:3306/mydb"; - String
account="root"; - String
password="123456"; - //构造函数加载驱动
- public
boolean mySqlConnection(){ - try
{ - Class.forName("com.mysql.jdbc.Driver");
- }
- catch(Exception
e){ - System.out.println(e.getMessage());
- return
false; - }
- return
true; - }
- //判断mySQL的开启与否
- public
boolean openOrNot() throws SQLException{ - conn=DriverManager.getConnection(url,account,password);
- if(conn.isClosed()){
- return
false; - }else{return
true;} - }
- //EQ方法用于查询数据库,返回结果集类型
- public
ResultSet EQ(String SQL){ - ResultSet
rs=null; - try{
- conn=DriverManager.getConnection(url,account,password);
- Statement
stmt=conn.createStatement(); - rs=stmt.executeQuery(SQL);
- }
- catch(Exception
e){ - System.out.println(e.getMessage());
- }
- return
rs; - }
- //UP用于更新修改数据库,返回int类型数据,表示影响到的行数,0为没影响
- public
int UP(String SQL){ - int
rs=0; - try{
- conn=
DriverManager.getConnection(url,account,password); - Statement
stmt=conn.createStatement(); - rs=stmt.executeUpdate(SQL);
- }
- catch(Exception
e){ - System.out.println(e.getMessage());
- }
- return
rs; - }
- //关闭数据库连接
- public
boolean close() throws SQLException{ - try{
- conn.close();
- }
- catch(Exception
e){ - System.out.println(e.getMessage());
- return
false; - }
- if(conn.isClosed()) {
- return
true; - }else{return
true;} - }
- }
Mainclass.java
- package
com.prince; - import
java.sql.*; - import
java.io.*; - public
class mainclass { - public
static void main(String[] args) throws SQLException { - //
TODO Auto-generated method stub - System.out.println("启动mySQL测试");
- mySqlConnection
msconn=new mySqlConnection(); //创建要用的类的对象,以供调用其中函数 - if(msconn.mySqlConnection()){
//测试驱动加载 - System.out.println("驱动加载成功");
- }else{System.out.println("驱动加载失败");}
- if(msconn.openOrNot()){
- System.out.println("连接成功");
//测试连接 - }else{System.out.println("连接失败");}
- try{
//插入实现 - String
sql="insert " + - "into
myaccount(username,passwd) " + - "values('网','m');";
- int
back=0; - back=msconn.UP(sql);
//执行语句 - System.out.println("受影响行数:"+back);
- if(back==0){System.out.println("插入失败");}else{System.out.println("插入成功");}
- }catch(Exception
e){System.out.println(e.toString());} - try{
//查询实现 - String
sql="select * " + - "from
myaccount;"; //查询语句定义 - ResultSet
rs=null; - rs=msconn.EQ(sql);
//执行语句 - System.out.println("查询如下:");
- while(rs.next()){
//查询返回的对象的下一个才是数据,为false则没数据 - //数据输出
- String
data=rs.getString("username"); - String
data2=rs.getString("passwd"); - //data
= new String(data.getBytes("ISO-8859-1"),"GB2312"); -
//如果乱码,则解码 System.out.println(data.toString()+data2.toString()); - }
- rs.close();
//查询完毕后,关闭返回结果 撤销空间,养成良好习惯 - }catch(Exception
e){System.out.println(e.toString());} - if(msconn.close()){
//关闭连接 - System.out.println("关闭成功");
- }else{System.out.println("关闭失败");}
- }
- }