今天尝试了一下java对数据库的操作,记录一下需要注意的地方
private static String driver="com.mysql.jdbc.Driver"; /*mysql数据库驱动程序,oracle为"oracle.jdbc.driver.OracleDriver" ; sql server的为"com.microsoft.sqlserver.jdbc.SQLServerDriver" */
private static String url = "jdbc:mysql://localhost:3306/test1"; /*这是连接数据库的路由,localhost为本地数据库 3306是数据库默认端口号,test1为数据库的名称*/
private static String user = "root"; //用户名
private static String password = "12345"; //数据库密码
Class.forName(driver); //启动驱动程序
conn = DriverManager.getConnection(url, user, password); //进行数据库的连接
以上基本是连接数据库的固定方式
此次例子用的是PreparedStatement(动态)来进行数据库的增删查改,Statement为静态,对需要多次进行数据库操作很麻烦,每次操作都需要写重复的代码,建议一般以PreparedStatement为主
String selectSql = "select * from my where id = ?;"; //查询语句
String insertSql = "insert into my (id,name,score)"+"values(?,?,?)"; //插入语句
// String updateSql = "update my set score = '?' where id=?"; //更新数据
// String deleteSql = "delete from my where id= ? "; //删除数据
以上四个语句实现对数据库的增删查改,由于原理及代码基本相同,本例只以上面两种为例子,?是占位符,这是进行动态操作的关键,可以让以上四条语句多次重复利用
Connection conn = null; //Connection接口 连接数据库
PreparedStatement ps = null; //PrepareStatement接口,预编译接口,可进行动态SQL语句
//即可把上面的问号代以不同参数,以此实现语句重复使用
ResultSet re = null; //获取SQL语句的查询结果,以集合的形式存放先对三个主要变量进行声明
/******************************************查询操作****************************************************/
ps = conn.prepareStatement(selectSql); //执行查询语句
ps.setString(1, "2"); //setString(int,String )方法是将selectSql中的占位符‘?’替换,int参数表示第几位占位符(即第几个问号,此处1表示第一个问号),将id = ?,的'?'代替为2(即id=2,String参数为要替换的内容)
re = ps.executeQuery(); //执行了给定的Sql语句,返回查询得到的结果集
while(re.next())
{
System.out.println("id:"+re.getInt("id")+","+"name:"+re.getString("name")+","+"score:"+re.getInt("score"));
}
ps.close(); //每执行完一次都需要关闭,才能继续连接新的sql指令
re.getInt("id")
这里的参数为表的属性
/********************************************************************************************************/
/*****************************************插入操作*******************************************************/
ps = conn.prepareStatement(insertSql); //此处的参数String 类型,为需要执行的SQL语句
ps.setString(1,"5");//将第1个问号替换为5,此时语句变为insert into my (id,name,score)"+"values(5,?,?)
ps.setString(2,"E");//将第2个问号替换为"E",此时语句变为insert into my (id,name,score)"+"values(5,"E",?)
ps.setString(3,"50");//将第3个问号替换为"50",此时语句变为insert into my (id,name,score)"+"values(5,"E",50)
re = ps.executeUpdate(); //执行了给定的Sql语句(insert,update,delete);
System.out.println("添加了"+re+"条记录到my表中");
ps.close();
下面贴上所有代码
package com.JDBC.Model;
import java.sql.*;
public class PreparedState {
private static String driver="com.mysql.jdbc.Driver";
private static String url = "jdbc:mysql://localhost:3306/test1";
private static String user = "root";
private static String password = "12345";
public static void main(String[] args) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet re = null;
String selectSql = "select * from my where id = ?;";
String insertSql = "insert into my (id,name,score)"+"values(?,?,?)";
// String updateSql = "update my set score = '?' where id=?";
// String deleteSql = "delete from my where id= ? ";
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, user, password);
ps = conn.prepareStatement(selectSql);
ps.setString(1, "2");
re = ps.executeQuery();
while(re.next())
{
System.out.println("id:"+re.getInt("id")+","+"name:"+re.getString("name")+","+"score:"+re.getInt("score"));
}
ps.close(); //每执行完一次都需要关闭,才能继续连接新的sql指令
ps = conn.prepareStatement(insertSql);
ps.setString(1,"5");
ps.setString(2,"E");
ps.setString(3,"50");
} catch (ClassNotFoundException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally
{
try
{
if(re!=null)
re.close();
if(ps!=null)
ps.close();
if(conn!=null)
conn.close();
}catch(Exception e) {
e.printStackTrace();
}
}
}
}