发表于: 2018-03-27 22:24:45

3 679


日期:3月27日

今天学习时间:6小时

今天完成的事:

看了一遍视频的编写步骤,然后自己再脑子里过一遍这些步骤为什么是这样安排的,然后自己去写,写了三次,才把jdbc连接数据的代码完整的些出来。下面是我自己写的jdbc链接数据库的代码:

package my;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class Demo3 {

public static void main(String[] args) {

Connection conn=null;

Statement stmt=null;

ResultSet rs=null;

try {

Class.forName("com.mysql.jdbc.Driver");

conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test?useSSL=true","root","ll..123");

//mysql5.7以上的,要在数据库名后面加?useSSL=true,不然运行之后,会出红色警告。

System.out.println(conn);

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally {

if(rs!=null) {

try {

rs.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

if(stmt!=null) {

try {

stmt.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

if(conn!=null) {

try {

conn.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

}

运行结果

到这一步,说明数据库已经链接成功。接下来就是jdbc链接数据库的CRUD操作,可能练不完,先做着。


接下来,打开mysql,看看我的数据库里面有什么东西,用eclipse编写代码对数据表里面的内容进行读取。

可以看到我的mysql里面的test数据库下面有个表tb_test,里面有4个字段,两行数据。

接下来编写代码

stmt=conn.createStatement(); //创建statement对象

rs=stmt.executeQuery("select * from tb_test");  //创建resultset对象,这行SQL语句后面可以不写分号

while(rs.next()){  //下一行 ,返回的是bool值,如果这一行数据不为null,则rs.next()=true

System.out.println("ID="+rs.getInt(1)+" 姓名:"+rs.getString(2)+" QQ:"+rs.getString(3)+" dizhi:"+rs.getString(4));  //括号里面的数字,表示数据库表里面第几列

把这几行代码添加到

conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test?useSSL=true","root","ll..123");

这行建立连接的代码后面,保存运行,结果如下:

可以看到,输出的数据跟我们用mysql查询的结果是一致的。

到这里,我把sql语句改成增删改之类的sql语句,程序无法执行,会报错Can not issue data manipulation statements with executeQuery().不能使用executeQuery()发出数据操作语句。

暂时得出结论:statement只能进行查询,无法进行增删改。如果可以执行增删改的话,希望师兄告知!


接着是preparestatement练习,下面个查询的程序:

package my;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

public class Demo4 {

static Connection conn;

static PreparedStatement sql;

static ResultSet rs;

public Connection getConnection() {  //创建与数据库连接的方法

try {

Class.forName("com.mysql.jdbc.Driver");

conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test?useSSL=true","root","ll..123");

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return conn;   //返回connection对象

}

public static void main(String[] args) {//声明主方法

Demo4 c=new Demo4();//创建本类对象

conn=c.getConnection();//获取与数据库的链接

try {

sql=conn.prepareStatement("select * from tb_test"+" where ID=?");//预处理的sql语句

sql.setInt(1, 2);//设置参数,把第一个问号的值设置为2,也就是ID=2

rs=sql.executeQuery();//执行sql预处理语句

while(rs.next()) {

System.out.println("ID="+rs.getInt(1)+" 姓名:"+rs.getString(2)+" QQ:"+rs.getString(3)+" dizhi:"+rs.getString(4));

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

还是我刚刚那个表,程序输出的结果是:

现在将预处理语句改为更新,程序报错了

sql=conn.prepareStatement("update tb_test set name=? where ID=?");

sql.setString(1, "SK");

sql.setInt(2, 2);

不能使用executeQuery()发出数据操作语句。按照意思是

update tb_test set name="sk" where ID=2;

用mysql执行这句sql语句的时候,没有错误,但是eclipse执行不了。是我的预处理语句写错了吗?

查看了一下书本之后,发现更改之后,应该用sql.executeUpdate执行sql语句,而不是sql.executeQuery。然后在进行查询。更改代码如下

sql=conn.prepareStatement("update tb_test set name? where ID=?");

sql.setString(1, "SK");

sql.setInt(2, 2);

sql.executeUpdate();

sql=conn.prepareStatement("select * from tb_test");

rs=sql.executeQuery();

程序运行结果:

可以看到,第二行的姓名被更改成了SK。

对比statement,可以发现preparestatement基于statement而高于statement,比statement好用很多。

今天到此结束。


明天的计划:强化练习statement和preparestatement操作数据库。如果时间足够就往下继续做任务1.17


遇到的问题:问题不是很大,都是看书查资料解决了。


收获:一周了,差不多对数据库的简单操作有了解了,Tomorrow will be better!


返回列表 返回列表
评论

    分享到