连接数据库,和数据增删改
连接数据库
package com.hanqi.util;
//这种util包下面放我们用到的工具类
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class dbHelper {
private static final String USERNAME = "test";
//常量全部大写
private static final String PASSWORD = "test";
private static final String URL
= "jdbc:oracle:thin:@localhost:1521:orcl";
private static final String DRIVERCLASSNAME
= "oracle.jdbc.OracleDriver";
public static Connection getConnection() {
//方法定义成静态的,可以通过类名直接点出来
Connection conn = null;
try {
Class.forName(DRIVERCLASSNAME);
//大写calss表示类(和反射有关系),小写class表示关键字..
//forName表示加载项目里面的某个类.也不需要取什么返回值,只需要加载一下就可以了
conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
//jdbc里面还有一个 驱动管理类,有一个方法(三个方法的重载)直接把这个连接获取到
//这个方法有个返回值,所以写一个返回值,在上面定义 一个
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
//写一个主方法测试一下是否连接成功了
public static void main(String[] args) {
Connection c = getConnection();
System.out.println(c);
destroy(c,null,null);
//当显示 oracle.jdbc.driver.T4CConnection@4629104a 样式
//就表明数据库连接成功了
}
public static void destroy (Connection conn, Statement sm,ResultSet rs) {
if (conn != null) {
try {
conn.close();
//如果它不是空的,就把它关了
} catch (SQLException e) {
e.printStackTrace();
}
conn = null;
//如果没关,就把空值赋给 conn,让垃圾回收机制去收回
}
if (sm != null) {
try {
sm.close();
} catch (SQLException e) {
e.printStackTrace();
}
sm = null;
}
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
rs = null;
}
}
}
增
package com.hanqi.dal;
//在使用jdbc做项目的公司,通常dal这个包作为数据库的连接类,跟数据库有关的东西都放到这个包下.
//以后学框架后会改用dao包
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import com.hanqi.util.dbHelper;
//这个类 是用于增删改查
//要添加一个数据,就要先打开那个表
public class DataBaseMethodDal {
//两个成员对象
private Connection conn;
private Statement sm;
//构建一个方法往里面添加数据
public int insertAppuser() {
//这个方法名 就是查找这个表de 意思
init();
//调用下面初始化的方法;
String sql =
"insert into student "+
"values(sq_test.nextval,'混蛋','stu-1063','2',sysdate,'ADV-609','1')";
//定义sql语句
int num = -1;
try {
num = sm.executeUpdate(sql);
//executeUpdate 是用来调用增删改的,把上面想要增加的语句放上
//如果执行成功 返回的是一个整数型,返回的是影响的行数 1,不成功返回-1
//executeQuery 是用来调用查询语句的
} catch (SQLException e) {
e.printStackTrace();
}
return num ;
}
//初始化,先初识化两个成员对象
public void init() {
conn = dbHelper.getConnection();
//先去获取到数据库的连接对象
try {
sm = conn.createStatement();
//由这个连接对象可以获取到执行数据库语句的一个对象
} catch (SQLException e) {
e.printStackTrace();
}
}
}
package com.hanqi.test;
import com.hanqi.dal.DataBaseMethodDal;
public class TestDemo {
public static void main(String[] args) {
DataBaseMethodDal dbmd = new DataBaseMethodDal();
int i = dbmd.insertAppuser();
//调用实例化类里面插入数据的那个方法就行了
System.out.println(i);
}
}
批量添加
package com.hanqi.dal;
//在使用jdbc做项目的公司,通常dal这个包作为数据库的连接类,跟数据库有关的东西都放到这个包下.
//以后学框架后会改用dao包
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import com.hanqi.model.AppUser;
import com.hanqi.util.dbHelper;
//这个类 是用于增删改查
//要添加一个数据,就要先打开那个表
public class DataBaseMethodDal {
//两个成员对象
private Connection conn;
private Statement sm;
private PreparedStatement ps;
//批量添加
public int[] insertAppuser(List<AppUser> list) {
init();
int[] num = null;
try {
for(AppUser user :list) {
String sql =
"insert into appuser "
+"values(sq_test.nextval,'"
+user.getName()+"','"
+user.getCode()+"','"
+user.getSex()+"',to_date('"
+user.getBirthday2()+"','yyyy-MM-dd'))";
sm.addBatch(sql);
//批量添加
}
num = sm.executeBatch();
// 批量提交
} catch (SQLException e) {
e.printStackTrace();
}
return num;
}
public void init() {
conn = dbHelper.getConnection();
//先去获取到数据库的连接对象
try {
sm = conn.createStatement();
//由这个连接对象可以获取到执行数据库语句的一个对象
} catch (SQLException e) {
e.printStackTrace();
}
}
import com.hanqi.dal.DataBaseMethodDal;
import com.hanqi.model.AppUser;
public class TestDemo {
public static void main(String[] args) {
DataBaseMethodDal dbmd = new DataBaseMethodDal();
List<AppUser> list = new ArrayList<AppUser>();
AppUser user1 = new AppUser("小红4","ss-14",1,new Date());
AppUser user2 = new AppUser("小红5","ss-15",2,new Date());
AppUser user3 = new AppUser("小红6","ss-16",1,new Date());
list.add(user1);
list.add(user2);
list.add(user3);
int[] arr = dbmd.insertAppuser(list);
//将一个数组转换成字符串打印出来
System.out.println(Arrays.toString(arr));
批量添加(重点这个)
package com.hanqi.dal;
//在使用jdbc做项目的公司,通常dal这个包作为数据库的连接类,跟数据库有关的东西都放到这个包下.
//以后学框架后会改用dao包
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import com.hanqi.model.AppUser;
import com.hanqi.util.dbHelper;
//这个类 是用于增删改查
//要添加一个数据,就要先打开那个表
public class DataBaseMethodDal {
//两个成员对象
private Connection conn;
private Statement sm;
private PreparedStatement ps;
//批量添加方法2着重记忆
public int[] insertAppuserByprepared(List<AppUser> list) {
//调用这个方法他的返回值是-2,代表添加成功啦
String sql =
"insert into appuser "
+"values(sq_test.nextval,?,?,?,?)";
init(sql);
int[] num = null;
try {
for(AppUser user :list) {
/*java.sql.Date extends java.util.Date */
ps.setString(1, user.getName());
ps.setString(2, user.getCode());
ps.setInt(3, user.getSex());
ps.setDate(4, new java.sql.Date(user.getBirthday().getTime()));
//java.sql.Date只记录日期没有时间 java.util.Date里带着时间和日期
//timeStamp 精确到毫秒 time只有时间没有日期
ps.addBatch();
//把上面的怼进去
}
num = ps.executeBatch();
//然后 执行!
// 批量提交
} catch (SQLException e) {
e.printStackTrace();
}
return num;
}
public void init(String sql) {
conn = dbHelper.getConnection();
try {
ps = conn.prepareStatement(sql);
//返回用于执行sql语句的一个对象
} catch (SQLException e) {
e.printStackTrace();
}
}
}
package com.hanqi.test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import com.hanqi.dal.DataBaseMethodDal;
import com.hanqi.model.AppUser;
public class TestDemo {
public static void main(String[] args) {
DataBaseMethodDal dbmd = new DataBaseMethodDal();
//下面是添加数据
//AppUser user = new AppUser("小红","ss-13",1,new Date());
//int i = dbmd.insertAppuser(user);
//下面是批量添加数据
List<AppUser> list = new ArrayList<AppUser>();
AppUser user1 = new AppUser("小红4","ss-14",1,new Date());
AppUser user2 = new AppUser("小红5","ss-15",2,new Date());
AppUser user3 = new AppUser("小红6","ss-16",1,new Date());
list.add(user1);
list.add(user2);
list.add(user3);
int[] arr = dbmd.insertAppuserByprepared(list);
//将一个数组转换成字符串打印出来
System.out.println(Arrays.toString(arr));
}
修改数据
public int updateappuser(String username) {
String sql = "update appuser a set a.code ='ss-10'"
+"where a.name = ?";
//sql注入攻击
//username += "or 1=1";会永远成立
init(sql);
int a = -1;
try {
ps.setString(1, username);
//索引是从1开始的
a =ps.executeUpdate();
//修改数据,返回影响的行数
} catch (SQLException e) {
e.printStackTrace();
}
return a;
}
public void init(String sql) {
conn = dbHelper.getConnection();
try {
ps = conn.prepareStatement(sql);
//返回用于执行sql语句的一个对象
} catch (SQLException e) {
e.printStackTrace();
}
}
}
package com.hanqi.test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import com.hanqi.dal.DataBaseMethodDal;
import com.hanqi.model.AppUser;
public class TestDemo {
public static void main(String[] args) {
DataBaseMethodDal dbmd = new DataBaseMethodDal();
//用占位符修改数据
//int i2 = dbmd.updateappuser("hanqi");
System.out.println(i4);
删除数据
//删除数据
public int deleteappuser(Integer id) {
String sql = "delete appuser a where a.id = ?";
init(sql);
int num = -1;
try {
ps.setInt(1, id);
num = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
return num;
}
//批量删除
public int deleteappuser(String code) {
String sql = "delete appuser a where a.code = ?";
//加入这个表里的code这一列有几个重复的
init(sql);
int num = -1;
try {
ps.setString(1, code);
num = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
return num;
}
public void init(String sql) {
conn = dbHelper.getConnection();
try {
ps = conn.prepareStatement(sql);
//返回用于执行sql语句的一个对象
} catch (SQLException e) {
e.printStackTrace();
}
}
package com.hanqi.test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import com.hanqi.dal.DataBaseMethodDal;
import com.hanqi.model.AppUser;
public class TestDemo {
public static void main(String[] args) {
DataBaseMethodDal dbmd = new DataBaseMethodDal();
//删除数据
//int i3= dbmd.deleteappuser(52);
//批量删除
//int i4= dbmd.deleteappuser("ss-11");
//System.out.println(i4);

浙公网安备 33010602011771号