发表于: 2018-03-28 23:53:51
1 617
日期:3月28日
今天学习时间4小时
今天完成的事情:
1.自己编写statement方式下的增删查改的程序。代码如下:
package my;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Demo5 {
public static Connection conn;
public static Connection connection() {//链接数据库
try {
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test?useSSL=false","root","ll..123");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
static void select() {//查询
conn=Demo5.connection();
String sql="select * from tb_test";
Statement stmt;
ResultSet rs;
try {
stmt = conn.createStatement();
rs=stmt.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();
}
}
static void create() {//建表
conn=Demo5.connection();
String sql="CREATE TABLE tb_stu (ID int not null primary key, name varchar(20),phone varchar(20))";
Statement stmt;
try {
stmt=conn.createStatement();
stmt.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
static void update() {//更改数据
conn=Demo5.connection();
String sql="update tb_test set name=\"anyask\" where id=1";
Statement stmt;
try {
stmt=conn.createStatement();
stmt.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
static void insert() {//插入数据
conn=Demo5.connection();
String sql="insert into tb_test (name,QQ,province) values (\"yinxianyun\",4564156,\"jiangsu\")";
Statement stmt;
try {
stmt=conn.createStatement();
stmt.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
static void delete() {//删除数据
conn=Demo5.connection();
String sql="delete from tb_test where name=\"yinxianyun\"";
Statement stmt;
try {
stmt=conn.createStatement();
stmt.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
delete();
}
}
先建立数据库连接,然后分别编写增、删、查、改、建表这五个函数,当需要用到哪个函数的时候,在主方法中调用即可。
2.preparestatement方式下的增删查改。下面是代码(有错):
package my;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class Demo6 {
static String Driver="com.mysql.jdbc.Driver";
static String url="jdbc:mysql://127.0.0.1:/3306/test?useSSL=true";
static String name="root";
static String password="ll..123";
static Connection conn;
static PreparedStatement sql;
static ResultSet rs;
public static Connection connection() {
try {
Class.forName(Driver);
conn=DriverManager.getConnection(url,name,password);
} catch (Exception e) {
// TODO Auto-generated catch block
}
return conn;
}
public static void main(String[] args) {
conn=Demo6.connection();
try {
// sql=conn.prepareStatement("create table tb_uesr (ID int not null primary key,name varchar(20),password varchar(20))");
// sql=conn.prepareStatement("insert into tb_test (name,QQ,province) values (\"小明\",486465,\"shandong\")");
// sql.executeUpdate();
// sql=conn.prepareStatement("delete from tb_test where ID=?");
// sql.setInt(1, 3);
// sql.executeUpdate();
// sql=conn.prepareStatement("update tb_test set name=\"?\" where ID=?");
// sql.setString(1, "阿花");
// sql.setInt(2, 2);
// sql.executeUpdate();
sql=conn.prepareStatement("select * from tb_test");
rs=sql.executeQuery();
while(rs.next()) {
System.out.println("ID:"+rs.getInt(1)+" 姓名:"+rs.getString(2)+" QQ:"+rs.getString(3)+" province:"+rs.getString(4));
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
这个代码,我看了很久,没看出哪里有错,想也想不通............运行就出错
后来没办法了,跑去问群里的师兄。。。过了一会儿,答案来了,我的url多写了一个/, 实在是气人。。浪费了一个小时,删了/结果立马就对了。
这个程序里面,增删查改建表都打了注释的,如果要用哪一样,就把其他的注释掉,就OK了,不过感觉有点麻烦呢。还不如我刚刚写的statement简单,改一下sql语句,改一下主函数的内容,就搞定了。
关于师兄提的execute,executeQuery,executeUpdate的区别,这三个已经有了了解。1.execute用于执行返回多个结果集、多个更新计数或二者组合的语句,execute方法应该仅在语句能返回多个ResultSet对象、多个更新计数或ResultSet对象与更新计数的组合时使用。当执行某个已存储过程或动态执行未知 SQL 字符串(即应用程序程序员在编译时未知)时,有可能出现多个结果的情况,尽管这种情况很少见。2.executeQuery用于产生单个结果集的语句,这个方法被用来执行 SELECT 语句,它几乎是使用最多的 SQL 语句。3.executeUpdate用于执行 INSERT、UPDATE 或 DELETE 等sql语句,executeUpdate 的返回值是一个整数,指示受影响的行数。
明天计划的事情:
先了解一下Spring,任务1.17里面要求的JdbcTemplate是Spring提供的,这个得着手去学习,才能继续往下走。另外,有时间还是要强化练习statement和preparestatement。
遇到的问题:刚刚这个问题就很蛋疼了,我一个新手,程序结构是没有问题的,就是因为多了一个/倒是程序报错,但是我又检查不出来。以后可能要学学怎么debug,查看程序那里有问题。不然这种问题,简直要命。
Ps:sql语句到现在用的还不熟练。。。还要练习!
收获:收获其实不少,statement和preparestatement两种情况的数据库增删查改以及建表,都get了。
Tomorrow will be better!
评论