数据库:软件 MySQL Oracle
数据表:一个表格,里面放着一条一条的数据,类似于Excel
字段:表示该数据是什么数据,例如:姓名,年龄,性别
数据行:一条完整的数据
JDBC连接数据库步骤:
//1. 注册驱动 JDBC连接MySQL
Class.forName("com.mysql.jdbc.Driver");
//2. 准备URL,是JDCB连接MySQL数据库的URL
String url = "jdbc:mysql://localhost:3306/javaee1707?useSSL=true";
//3. 通过DriverManager获取到连接对象Connection conn = DriverManager.getConnection(url, "root", "123456");
System.out.println(conn);//4. 关闭数据库连接,释放资源
conn.close();
还可以自己封装成一个工具类JDBCUtil,这个是自己写的,上面是利用jar包连接的
通过封装好的工具对数据库进行一系列的操作,下面知识简单的一个例子
//1. 通过已经封装好的JDBC工具类,获取到数据库的连接对象
Connection conn = JDBCUtil.getConnection();
try {
//2. 获取Statement,SQL语句运输者,将SQL语句运输到MySQL里面,让MySQL运行
st = conn.createStatement();
//3. 准备SQL语句
String sql = "create table WOW(heroID int not null primary key auto_increment,heroName char(30))";
//4. 通过Statement执行SQL语句
int count = st.executeUpdate(sql);
//5. 查看创建的结果
System.out.println("影响的行数:" + count);
防止sql注入,就是根据你的url规则直接登录
try {
conn = JDBCUtil.getConnection();
//2. 准备预处理SQL语句
String sql = "select * from user where name=? and password=?"; //?是数据占位符
//3. 获取PreparedStatement对象,传入的参数就是预处理的SQL语句
ps = conn.prepareStatement(sql);
//4. 准备参数
ps.setString(1, name);
ps.setString(2, password);
//5. 执行预处理之后的SQL语句
set = ps.executeQuery();
BeanUtils
是一个工具类,里面的方法都是静态修饰的,可以通过类名直接调用
commons-beanutils-1.8.3.jar
commons-logging-1.1.3.jar 日志支持包,没有这个包无法使用BeanUtils
setProperty(Object bean, String name, Object value);
Object bean 是按照JavaBean规定定义的类,这个类要求所有的成员变量私有化,并且对外提供对应的
setter和getter方法
String name 要赋值的属性名,这里是借助于反射的思想获取到对应setter方法
Object value 要赋值给属性的数据
getProperty(Object bean, String name);
Object bean 是按照JavaBean规定定义的类,这个类要求所有的成员变量私有化,并且对外提供对应的
setter和getter方法
String name 要获取的属性的名字,这里实际调用大方法是对应的getter方法
copyProperties(Object dest, Object orig)
Object dest 是要被复制的类对象
Object orig 复制的源数据
实例:
User u = new User();
u.setName("小强");
//利用BeanUtils里面的方法来给对象属性赋值
try {
BeanUtils.setProperty(u, "age", 24);
System.out.println("name:" + u.getName());
dbutils
* 获取单个girl对象
* 使用ResultSetHandler
QueryRunner qr = new QueryRunner();
Girl girl = qr.query(conn, sql, new ResultSetHandler<Girl>()
* 获取单个girl对象
* BeanHandler
Girl girl = qr.query(conn, sql, new BeanHandler<>(Girl.class));
* 获取List集合Girl数据
* BeanListHandler
List<Girl> list = qr.query(conn, sql, new BeanListHandler<>(Girl.class));
获取一个Gril对象
使用的方法,
QueryRunner query(Connection conn, String sql, ResultSetHandler rs, Object... params)
将数据库查询到的数据保存的到一个Object类型的数组中
Object[] arr = qr.query(conn, sql, new ArrayHandler());
将数据库查询到的所有数据,每一个数据行做成一个数组,把所有的数组放入到一个List集合中
List<Object[]> list = qr.query(conn, sql, new ArrayListHandler());
/**
* 这里可以用到所有的增,删,该方法
* @throws SQLException
*/
@Test
public void testUpdate() throws SQLException {
String sql = "delete from girl where girlID=2";
Connection conn = JDBCUtil.getConnection();
QueryRunner qr = new QueryRunner();
qr.update(conn, sql);
JDBCUtil.close(conn, null);
//可以使用DbUitls里面的方法
//DbUtils.close(conn);
}
c3p0连接池:
xml文件
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/day38?useSSL=true</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="user">root</property>
<property name="password">123456</property>
<property name="initialPoolSize">3</property>
<property name="maxPoolSize">6</property>
<property name="maxIdleTime">1000</property>
</default-config>
</c3p0-config>
代码
@Test
//使用XML配置文件的方式,创建C3P0连接池
public void testXML() throws Exception {
//创建c3p0核心类
//创建当前核心类,就会自动加载在src下的c3p0-config.xml
ComboPooledDataSource dataSource = new ComboPooledDataSource();
PreparedStatement pstmt = null;
Connection conn = dataSource.getConnection();
for (int i = 0; i < 10; i++) {
String sql = "insert into student(name) values(?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "逗比");
pstmt.executeUpdate();
}
pstmt.close();
conn.close();