实习第一天:JDBC
准备工作
找到并下载与MySQL版本匹配的驱动包
我是在https://mvnrepository.com/
这里找到的8.0.12版本的
接着
点击+号导入下载的驱动包。
连接数据库
在DBtools中实现DBconnect()方法
private static final String DRIVER_NAME = "com.mysql.jdbc.Driver";
//数据库连接地址
private static final String URL = "jdbc:mysql://localhost:3306/test";
//用户名
private static final String USER_ID = "root";
//密码
private static final String PASSWORD = "377309978";
//DBconnect方法
public Connection DBconnect(Connection conn)
{
try{
//加载MySQL的驱动类
Class.forName(DRIVER_NAME);
//获取数据库连接
conn = DriverManager.getConnection(URL,USER_ID,PASSWORD);
//简单的查询语句进行测试
String sql = "SELECT JNO from j";
//用PreparedStatement来执行SQL
PreparedStatement statement = conn.prepareStatement(sql);
ResultSet rs = statement.executeQuery(sql);
//打印出结果集中的所有结果
while(rs.next()) {
String Jno = rs.getString("JNO");
System.out.println(Jno);
}
rs.close();
statement.close();
}
catch(ClassNotFoundException e)
{
System.out.println("JDBC Driver not found");
}
catch(SQLException e){
System.out.println("SQL Error !");
e.printStackTrace();
}
catch (Exception e){
e.printStackTrace();
}
return conn;
}
在Main中创建DBtools对象并调用DBconnect()方法
package Demo;
public class Main {
public static void main(String[] args)
{
Connection conn = null;
DBtools dbt = new DBtools();
dbt.DBconnect(conn);
}
}
运行程序后
查询数据
public void check(Connection conn) {
String sql = "SELECT JNAME from j";
//用PreparedStatement来执行SQL
try{
PreparedStatement statement = conn.prepareStatement(sql);
ResultSet rs = statement.executeQuery(sql);
while(rs.next()) {
String Jno = rs.getString("JNAME");
System.out.println(Jno);
}
System.out.println();
rs.close();
statement.close();
}
catch (SQLException e) {
System.out.println("SQL Error!");
e.printStackTrace();
}
}
运行程序后
插入数据
public void insert(Connection conn) {
String sql = "insert into j (JNO,JNAME,CITY) values ('J10','发电机厂','长沙')";
//用PreparedStatement来执行SQL
try{
PreparedStatement statement = conn.prepareStatement(sql);
statement.executeUpdate(sql);
statement.close();
}
catch (SQLException e) {
System.out.println("SQL Error!");
e.printStackTrace();
}
}
运行程序后
删除数据
public void delete(Connection conn){
String sql = "delete from j where JNO = 'J10'";
//用PreparedStatement来执行SQL
try{
PreparedStatement statement = conn.prepareStatement(sql);
statement.executeUpdate(sql);
statement.close();
}
catch (SQLException e) {
System.out.println("SQL Error!");
e.printStackTrace();
}
}
修改数据
public void update(Connection conn){
String sql = "update j set JNAME = '火车厂' where JNO = 'J2'";
//用PreparedStatement来执行SQL
try{
PreparedStatement statement = conn.prepareStatement(sql);
statement.executeUpdate(sql);
statement.close();
}
catch (SQLException e) {
System.out.println("SQL Error!");
e.printStackTrace();
}
}
附:PreparedStatement
PreparedStatement接口继承自Statement接口,PreparedStatement比普通Statement对象使用起来更加灵活更有效率.并且比Statement更加安全,因为Statement有一个漏洞就是可以sql注入
第一步:创建PreparedStatement对象
PreparedStatement pstm 同样是通过Connection的preparedStatement(sql)方法来创建对象,sql语句可具有一个或者多个输入参数,这些输入参数的值在SQL语句创建时未被指定,而是为每个输入参数保留一个问号’?'作为占位符;
示例:
下面的创建语句中就带有3个输入参数的SQL语句 pstm=con.prepareStatement(“update dog set health=?,love=? where id =?”);
第二步:设置每个输入参数的值
通过调用set*()方法来完成(*代表数据类型)
代码:
pstm.setInt(1,10);
pstm.setInt(2,90);
pstm.setString(3,“d1”);
(注意事项:占位符位置从1开始)
第三步:执行SQL语句
执行方法与Statement一样.比如:pstm.executeUpdate();
优点: 创建PreparedStatement对象时会对SQL语句进行预编译,所以执行速度要快于Statement对象,因此,如果程序中存在需要多次执行SQL语句时,应该使用PreparedStatement对象来执行数据库操作,以提高效率。
以上附参考自https://blog.csdn.net/miniduhua/article/details/52885482