Junit @test
Build Path-->Add libraries-->Util5
@Test
public void SayHello(){
System.out.println("HelloJUtils")
}
JDBC:java操作数据库
安装驱动的jar包
private String className= "oracle.jdbc.driver.OracleDriver";
private String url="jdbc:oracle:thin:@127.0.0.1:1521:XE";
private String user = "briup";
private String password = "briup";
@Test
public void test_connection1() {
Connection conn=null;
try {
Class.forName(className);
conn = DriverManager.getConnection(url, user, password);
System.out.println(conn);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally {
if(conn!=null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
在编译的过程中我们要用到配置文件,让我们的代码更加安全。一般会把一些配置信息放在配置文件中,用读取文件的方式去读取配置文件。
封装JDBC获取连接的方式
public static Connection getConnection() throws Exception {
InputStream is =
ClassLoader.getSystemClassLoader().getResourceAsStream("jdbcoracla.Properties");
Properties pros = new Properties();
pros.load(is);
String user = pros.getProperty("user");
String password = pros.getProperty("password");
String url = pros.getProperty("url");
String driver = pros.getProperty("driver");
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, user, password);
return conn;
}
配置文件(oracla):创建jdbcoracla.Properties
user=briup
password=briup
url=jdbc:oracle:thin:@127.0.0.1:1521:XE
driver=oracle.jdbc.driver.OracleDriver
封装连接池的方式(druid):创建druid.Properties
private static DataSource dataSource;
static {
Properties properties = new Properties();
try {
InputStream is =
JDBCUtils.class.getClassLoader().getResourceAsStream(" druid.properties");
properties.load(is);
dataSource = DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getPoolConnection() throws Exception {
return dataSource.getConnection();
}
DML语句和DDL语句类似:简单表示
@Test
public void psTest() {
Connection conn = null;
PreparedStatement ps = null;
try {
conn = JDBCUtils.getConnection();
String sql = "insert into t_user(id,name,age) values(t_user_seq.nextval,?,?)";
ps = conn.prepareStatement(sql);
for (int i = 0; i <=100000; i++) {
ps.setString(1, "tom"+i);
ps.setInt(2, (int) (Math.random()*80));
ps.execute();
}
System.out.println("ps执行结束了:");
} catch (Exception e) {
e.printStackTrace();
}finally {
JDBCUtils.closeResourse(conn, ps, null);
}
}
DQL语句查询操作:简单表示
DQL语句一般是查询操作,用到PreparedStatement填充占位符完成操作,而且一般要创建查询的对象。
public static <T> List<T> queryForList2(String sql,Function<ResultSet,
List<T>>f,Object... args) throws Exception{
Connection conn =null;
PreparedStatement ps=null;
ResultSet rs=null;
List<T> list =null;
try {
conn = getConnection();
ps = conn.prepareStatement(sql);
for (int i = 0; i < args.length; i++) {
ps.setObject(i+1, args[i]);
}
rs = ps.executeQuery();
list = f.apply(rs);
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
@Test
public void queryForList_test() {
String sql="select id,name,age from t_user where id in(?,?,?)";
Function<ResultSet, List<User>> f=rs -> {
List<User> list=new ArrayList<User>();
try {
while(rs.next()) {
long id = rs.getLong(1);
String name = rs.getString(2);
int age = rs.getInt(3);
User user = new User(id, name, age);
list.add(user);
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
};
List<User> list1=null;
try {
list1 = JDBCUtils.queryForList2(sql, f,1,2,3);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(list1);
}
Statemrete和Preparestatement区别:
Statement在执行sql语句的时候一般都是执行一个创建一个。
Preparestatement是一个预编译的sql语句,一般可以在执行conn.Preparestatement(sql);这个获取连接对象的时候已经将sql模板发送给了数据库。当执行sql语句的时候一般采用填充占位符的方式来对执行sql语句。
相对于Statemen,Preparestatement解决了sql注入的问题,会使数据库更加安全。
获取到数据库连接对象之后,可以进行批处理(Batch)操作。
批处理可以提高java代码执行sql语句的效率
for(int i=1;i<=10000;i++) {
ps.setString(1, "tom"+i);
ps.setInt(2, 20);
//把这组数据加入到批处理中
ps.addBatch();
//每200条提交执行一次
if(i%200==0) {
ps.executeBatch();
} //防止批处理中的sql语句没有执行
ps.executeBatch();