jdbc(Java DataBase Connectivity,java数据库连接),是一门基础的持久层技术….下面我用jdbc实现对数据的增删查改
(这里是statement版本的,statement主要是使用字符串拼接的方式拼凑出sql语句,然后将sql字符串作为参数传入statement中执行,这样做比较危险,因为十分容易被sql注入….,preparedstatement会对sql语句进行预处理,相对而言比较安全….点击这里,查看preparedstatement进行增删查改操作..)
题外话不多说了,进入正题…
首先我们要引入jdbc的驱动包…就是这个…
如果读者没有的话可以去http://download.csdn.net/download/luciferms/10046549进行下载….
下面是源代码(封装了增删查改四个方法):
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import Pojo.User;
public class JDBCTest {
//数据库驱动
private static String JDBC_DRIVER= "com.mysql.jdbc.Driver";
//数据库用户名
private static String MYSQL_USERNAME = "root";
//数据库密码
private static String MYSQL_PASSWORD = "scott";
//数据库连接地址
private static String MYSQL_URL= "jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=true";
//预先定义一个数据库连接器,在后面的静态代码块进行赋值
private static Connection conn = null;
//预先定义一个Java与数据库的会话,在后面的静态代码块进行赋值
private static Statement sm = null;
//静态代码块,当类被抛进虚拟机的时候会优先执行静态代码块,并且只会执行一次...
//在这里我用来加载驱动和给conn和sm赋值
static{
try {
//加载驱动,是将com.mysql.jdbc.Driver抛进java虚拟机,生成字节码...
Class.forName(JDBC_DRIVER);
conn = DriverManager.getConnection(mysql_URL,MYSQL_USERNAME,MYSQL_PASSWORD);
sm = conn.createStatement();
} catch (Exception e) {
e.printStackTrace();
}
}
//往数据库里添加一个User对象...
public void add(User u){
try {
//通过字符串拼接的方式生成sql语句
//值得一提的是,在mysql语句中,char和varchar类型的字段都是用''单引号括起来的....
//就是说拼接的时候生成的字符串应该是
//INSERT INTO USER(ID,USERNAME,PASSSWORD) VALUES(1,'LuciferMS','123456')
//请读者格外注意拼接的这个细节...
String sql = "INSERT INTO USER(ID,USERNAME,PASSWORD) VALUES(" + u.getId() + ",'" + u.getUsername()+ "','"+u.getPassword() +"')";
sm.executeUpdate(sql);
System.out.println("添加成功.....");
} catch (Exception e) {
e.printStackTrace();
}
}
//通过id删除一条user记录
public void delete(int id){
try {
String sql = "DELETE FROM USER WHERE ID = " + id;
sm.executeUpdate(sql);
System.out.println("删除成功....");
} catch (Exception e) {
e.printStackTrace();
}
}
//查出所有的user记录
public void select(){
try {
String sql = "SELECT * FROM USER " ;
ResultSet rs = sm.executeQuery(sql);
while(rs.next()){
int id = rs.getInt("ID");
String username = rs.getString("USERNAME");
String password = rs.getString("PASSWORD");
User u = new User(id,username,password);
System.out.println(u);
}
} catch (Exception e) {
e.printStackTrace();
}
}
//通过id修改user记录
public void update(int id,String username,String password){
try {
//这里也要注意字符串拼接问题,用''单引号括住字段......
String sql = "UPDATE USER SET USERNAME='" + username + "',PASSWORD = '" + password + "' WHERE ID = " + id;
sm.executeUpdate(sql);
System.out.println("更新成功....");
} catch (Exception e) {
e.printStackTrace();
}
}
}
下面是测试环节:
1.首先测试的是增加:
public static void main(String[] args) {
JDBCTest jt = new JDBCTest();
System.out.println("------增加前-------");
jt.select();
User u = new User(4,"faker","123456");
jt.add(u);
System.out.println("------增加后-------");
jt.select();
}
测试结果:
2.对删除的测试
public static void main(String[] args) {
JDBCTest jt = new JDBCTest();
System.out.println("------删除前-------");
jt.select();
jt.delete(2);
System.out.println("------删除后-------");
jt.select();
}
测试结果:
3.对修改的测试:
public static void main(String[] args) {
JDBCTest jt = new JDBCTest();
System.out.println("------修改前-------");
jt.select();
jt.update(3, "Elliot", "456789");
System.out.println("------修改后-------");
jt.select();
}
测试结果: