package peparestatement;
import org.junit.Test;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Properties;
/*
*实现对数据表的 增删改查 操作
*
*
*
*
**/
public class PreparedStatementUpdateTest {
//向customers表中添加一个数据
@Test
public void testInsert()throws IllegalAccessException, InstantiationException, ClassNotFoundException, SQLException {
Class clazzz = Class.forName("com.mysql.jdbc.Driver"); //使用全类名
Driver driver =(Driver) clazzz.newInstance();
Properties info = new Properties();
String url = "jdbc:mysql://localhost:3306/crashcourse?serverTimezone=GMT%2B8";
info.setProperty("user","vango");
info.setProperty("password","kuai8686");
Connection conn = driver.connect(url,info);
// System.out.println(conn);
String sql = "insert into customers(cust_id,cust_name,cust_address)values(?,?,?)";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1,999);//填充字符?
ps.setString(2,"duxiaokai");
ps.setString(3,"street john");
//执行操作
ps.execute();
//资源的关闭
ps.close();
conn.close();
}
}
学习期间出现过的问题一
insert into **customers**这里报错,但数据库通过下面这个语句也显示连接上了啊
System.out.println(conn);
其实问题很简单,只需要将项目那里的数据库连接上即可。
之后还会出现提示
问题二
之后又写了一个通用增删改查的函数
/*测试通用方法*/
@Test
public void testCommonUpdate() throws SQLException {
String sql = "insert into customers(cust_id,cust_name,cust_address)values(?,?,?)";
updateTable(sql,"999","dukai","dongjing");
}
/*通用的增删改 方法*/
/*可形参,多个数值会被当作数组传入。sql语句中有几个占位符,这个args的数组长度为多少*/
@Test
public void updateTable(String sql,Object ...args) throws SQLException {
Connection conn = null;
PreparedStatement ps = null;
try {
/*获取数据库连接*/
conn = JDBCUtiles.getConnection();
/*预编译sql语句*/
ps = conn.prepareStatement(sql);
/*填充占位符*/
for(int i = 0;i<args.length;i++){
ps.setObject(i+1,args[i]);
}
/*执行操作*/
ps.execute();
} catch (Exception e) {
e.printStackTrace();
}
/*关闭资源*/
JDBCUtiles.closeResource(conn,ps);
}
但在测试运行过程中提示**
Method updateTable should have no parameters**
解决
@Test不能有返回值和参数。只需将测试方法前的@Test去掉即可。