jdbc是一种用于后台和数据库沟通的技术!!
前提:驱动
打个比方,我们需要的驱动可以比作是油,相对应的,不同的数据库可以比作是车。不同的油驱动着不同牌子的车也就对应着不同的数据库需要不同的驱动。mysql的车就需要加对应mysql的油,也就是驱动!这里驱动就是响应的jar包。
首先需要到 这里 下载驱动mysql的油。并将jar包导入到你项目的lib文件夹下。
一共需要五步,分步骤代码为了简洁暂时没写到try catch块中,最后的总样例会写到。
//第一步 通过反射技术加载该类 该类的全路径
Class.forName("com.mysql.jdbc.Driver");
//第二步 创建连接:连接信息url:,用户名,及密码
Connection conn =DriverManager.getConnection
("jdbc:mysql://localhost:3306/demo","root","123456");
//三个字符串分别对应数据库url,用户名,密码
实际开发中我们常常将url,username,password三个字符串分离出来定义成三个静态属性
private static String url = "jdbc:mysql://localhost:3306/demo";
private static String user = "root";
private static String password = "123456";
conn = DriverManager.getConnection(url,user,password);
//第三步 创建声明 预处理
String sql = "insert into user values(?,?,?)";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1,111);
ps.setString(2,"dz");
ps.setString(3,"123456");
一个preparedstatement是从java.sql.connection对象和所提供的sql字符串得到的,sql字符串中包含问号(?),这些问号标明变量的位置,然后提供变量的值,最后执行语句
注意:左侧类声明声明是prepare是有ed的,而右侧connection的方法是没有ed的
语句为增删改时:
//第四步 执行sql语句
ps.execute();
如果是执行查询语句:
//将数据库查询的信息放到resultSet结果集中!是集合的一种set
ResultSet resultSet = ps.executeQuery();
//rs是查出的列表形式的数据
while(resultSet.next()){//判断这个集合中有没有向下一个元素
resultSet.getString("username"));
}
resultSet.getXXX(“列名”)可以将该字段的值取出,xxx对应字段类型
实际开发中我们时常将查出的信息再次封装成一个对象,最终生成一个对象的集合
List<User> list= new ArrayList<User>();
User user = null;
while(resultSet.next()){
user = new User();
user.setId(resultSet.getInt("id"));
user.setUsername(resultSet.getString("username"));
user.setPassword(resultSet.getString("password"));
list.add(user);
}
return list;
注意事项:
1.当所查结果是多条数据时,应该用集合装对象!
2.需要在while循环里面new 对象!! 否则 最后一个对象将之前所有数据覆盖!
/**
* 先关闭小的!顺序是rs ps conn
*/
ps.close();
conn.close();
这部分代码我们一般放到finally块中,进行资源的关闭。
建立工具类DataBase 静态方法getConnection() 用于返回connection对象
public class DataBase {
public static Connection getConnection(){
try{
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo","root","123");
return conn;
}catch(SQLException e){
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
}
数据访问层(Dao)代码
public class UserDao {
public static List findAllByUsernameAndPassword(String username,String password){
Connection conn = DataBase.getConnection();
PreparedStatement ps = null;
try{
String sql = "select * from user where username=? and password=?";
ps = conn.prepareStatement(sql);
ps.setString(1,username);
ps.setString(2,password);
ResultSet resultSet = ps.executeQuery();
List list= new ArrayList();
User user = null;
while(resultSet.next()){
user = new User();
user.setId(resultSet.getInt("id"));
user.setUsername(resultSet.getString("username"));
user.setPassword(resultSet.getString("password"));
list.add(user);
}
return list;
}catch (Exception e){
e.printStackTrace();
}finally {
try {
conn.close();
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return null;
}
}
更多java基础知识详见我的个人博客Marsguest’s Blog