发表于: 2018-03-27 22:24:45
3 680
日期: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!
评论