第一种方式
1、创建链接
Connection conn = null;
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/exam?characterEncoding=UTF-8","root", "123456");
第二种方法 (加载配置文件)
InputStream in= Test93.class.getClassLoader().getResourceAsStream("jdbc.properties");
Properties ps = new Properties();
ps.load(in);
String url = ps.getProperty("url");
String user = ps.getProperty("user");
String password = ps.getProperty("password");
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection(url, user, password);
jdbc.properties
url=jdbc:mysql://localhost:3306/testdb
user=root
password=123456
2、操作数据库
String sql="select * from test001";
Statement statement=conn.createStatement();
ResultSet resultSet = statement.executeQuery(sql);
while(resultSet.next()){
Emp emp = new Emp();
emp.setId(resultSet.getInt(1));
emp.setName(resultSet.getString(2));
System.out.println(emp);
第二种利用反射
public static <T> List <T> test01(Class<T> clazz,String sql,Object...o){
Connection conn=getcon();
List<T> list=new ArrayList<>();
try {
//prepareStatement对象防止sql注入的方式是把用户非法输入的单引号用反斜杠做了转义,从而达到了防止sql注入的目的
PreparedStatement ps=conn.prepareStatement(sql);
//设置SQL中的占位符内容
for (int i = 0; i <o.length ; i++) {
ps.setObject(i+1,o[i]);
}
ResultSet result=ps.executeQuery();
//获取result的元数据
ResultSetMetaData metaData=result.getMetaData();
while (result.next()){
//反射 创建实例
T t=clazz.newInstance();
//元数据中获取当前一个对象有多少列
for (int i = 0; i <metaData.getColumnCount() ; i++) {
//获取当前列的名字
String name = metaData.getColumnLabel(i + 1);
//获取当前属性的值
Object value=result.getObject(i+1);
//获取对应成员变量
Field field=clazz.getDeclaredField(name);
//设置私有属性可见
field.setAccessible(true);
//为对应属性赋值
field.set(t,value);
}
list.add(t);
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
public static void main(String[] args) {
String sql="select * from test001 where id=?";
try {
List list=test01(Class.forName("com.xian.Emp"),sql,3);
System.out.println(list);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
三、通用代码
import java.sql.*;
public class TestJDBC {
public static void main(String[] args) {
try {
select();
} catch (SQLException e) {
e.printStackTrace();
}
}
//获取链接
public static Connection getcon(){
Connection conn = null;
try {
//Mysql8.0以上就需要com.Mysql.cj.jdbc.Driver 以前的版本不需要CJ
Class.forName("com.mysql.cj.jdbc.Driver");
//数据库链接自己的,用户名,密码自己的
conn= DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=UTF-8","root", "123456");
return conn;
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
//执行SQL语句
public static void select() throws SQLException {
Connection conn;
conn=getcon();
String sql="select * from t_dept";
Statement statement=conn.createStatement();
ResultSet resultSet = statement.executeQuery(sql);
while(resultSet.next()){
//对应的类是自己数据对应的
User user = new User();
user.setId(resultSet.getInt(1));
user.setName(resultSet.getString(2));
System.out.println(user);
}
}
}