관련 학습 권장사항: java 기본
1. 데이터베이스에 대한 JDBC 연결 작업
을 클래스에 캡슐화하여 작성 시 코드를 단순화할 수 있습니다.
(1) JDBC-MySQL 데이터베이스 드라이버 로드
try { Class.forName("com.mysql.cj.jdbc.Driver");}catch (Exception e){ }
(2) 데이터베이스에 연결
Connection con = null;//声明要连接数据库的对象comString uri = "jdbc:mysql://localhost:3306/数据库名?useSSL=true &characterEncoding=utf-8"; //连接地址String user = "root"; //连接数据库的用户名String password = "123456"; //连接数据库的密码try { con = DriverManager.getConnection(uri,user,password); //连接代码}catch(SQLException e){ }
(3) 데이터베이스의 데이터를 연산하는 코드 작성
2. 쿼리 연산
1, 쿼리 작업의 특정 단계
(1) 데이터베이스에 SQL 문 보내기:
Statement sql;try{ sql = con.createStatement();}catch (SQLException e){ }
먼저 SQL 문 개체를 선언한 다음 생성된 연결 개체가 createStatement()
메서드를 호출하도록 합니다. > SQL 문 개체를 생성합니다. createStatement()
创建这个SQL语句对象。
(2)处理查询结果
有了SQL语句对象后,这个对象可以调用相应的方法实现对数据库中表的各项操作,其中查询结果存放在一个ResultSet类声明的对象中。即SQL查询语句对数据库的查询操作讲放回一个ResultSet对象,ResultSet由“列”(字段)组织的数据行构成。
rs = sql.executeQuery("select * from 表的名称");//读取表中的所有列,*为通配符rs = sql.executeQuery("select 行1字段名,行2字段名... from 表的名称");//读取表中特定的列
ResultSet对象一次只能看到一行数据,使用next()方法移到下一行。ResultSet对象可以通过getXxx(int columnIndex)
获得列值和通过传递列名getXxx(String columnName)
获得列值。
(3)关闭连接
con.close(); //关闭con所连接的数据库
注意:数据库与连接对象紧密绑定,应在使用完数据库再进行关闭操作。
2,控制游标
结果集的游标的初始位置在结果集第一行的前面,结果集调用next()方法向下(后)移动游标,移动成功返回true,移动失败返回false。如果要在结果集中移动并显示若干条记录,必须返回一个滚动的结果集。方法如下:
Statement stmt = con.createStatement(int type,int concurrency);//获得一个Statement对象,根据参数的值,stmt返回相应类型的结果集:ResultSet re = stmt.executeQuery(SQL语句);type的取值:决定滚动方式: ResultSet.TYPE_FORWARD_ONLY 结果集的游标只能向下滚动 ResultSet.TYPE_SCROLL_INSENSITIVE 游标可以上下移动,数据库变化时,结果集不变 ResultSet.TYPE_SCROLL_SENSITIVE 返回可滚动的结果集,数据变化时,结果集同步改变 Concurrency取值:决定是否可以用结果集更新数据库 ResultSet.CONCUR_READ_ONLY 不能用结果集更新数据库中的表 ResultSet.CONCUR_UPDATABLE 能用结果集更新数据库中的表 滚动查询常用的ResultSet的方法:public boolean previous() 将游标向上移动,当移动到结果集第一行之前时返回falsepublic void beforeFirst() 将游标移动到结果集的初始位置,第一行之前public void afterLast() 将游标移动到结果集的最后一行之后public void first() 将游标移动到第一行public void last() 将游标移动到最后一行public boolean isAfterLast() 判断游标是否在最后一行之后public boolean isBeforeFirst() 判断游标是否在第一行游标之前public boolean isFirst() 判断游标是否指向第一行public boolean isLast() 判断游标是否指向最后一行public int getRow() 得到当前游标所指向的行号,行号从1开始,如果结果集没有行,返回0public boolean absolute(int row) 将游标移动到参数row指定的行(参数取负数即倒数)
(3)条件与排序查询
where子语句:select 字段 from 表明 where 条件
(1)字段值与固定值比较 select * from table where name='张三'(2)字段值在某个区间 select * from table where number>5 and number<10 and name!='李四'(3)使用某些特殊的日期函数(Data:year-month-day)select * from table where year(表明日期的字段名)<1980 and month(表面日期的字段名)<=10select * from table where year(表明日期的字段名) between 2002 and 2021(4)使用某些特殊的时间函数(hour,minute,second) select * from timelist where second(表明时间的字段名)=36(5)用操作符like进行模式匹配,使用%代替0个或多个字符,用一个下划线_代替一个字符。 select * from table where name like'%欧%' //查询name字段有“欧”字的记录
order by语句:可结合where语句使用
select * from table order by height select * from table where name like '%王%' order by name
三、更新、添加和删除操作
Statement对象调用public int executeUpdate(String sqlStatement);
通过参数指定的方式对数据库表中的记录的更新、添加和删除操作。
(1)更新 update 表名 set 字段 = 新值 where <条件子句>(2)添加 insert into 表 values (对应具体的记录)(3)删除 delete from 表名 where <条件子句>
四、使用预处理语句
Java提供了更高效的数据库操作机制,就是PreparedStatement对象,即预处理语句对象。将SQL语句处理为数据库底层语句,再传输给数据库。
使用通配符:对SQL进行预处理时,可以用 通配符? 来代替字段的值,只要在预处理语句执行之前再设置通配符所代表的具体值即可:
String str = "select * from 表名 where 字段1 < ? and 字段2 = ?";PreparedStatement sql = con.prepareStatement(str);sql.setXxx(int parameterIndex,Type x);//该方法设置?代表的值,parameterIndex代表第几个?,x代表要替换的值。
五、通用查询
编写通用查询类,用户可以将数据库名、SQL语句传递给该类的对象,那么该对象就用一个二维数组返回查询的记录。
编写通用查询类需要知道数据库表列(字段)的名字和数量。常用方法为用结果集ResultSet对象rs调用getMetaData()
方法返回一个ResultSetMetaData对象:
ResultSetMetaData metaData = rs.getMetaData();
然后该对象metaData调用getColumnCount()
方法既可以返回rs中列的数目,调用getColumnName(int i)
(2) 쿼리 결과 처리
con.setAutoCommit(false);
getXxx(int columnIndex)
를 통해 열 값을 얻을 수 있고, 열 이름 getXxx(String columnName)
을 전달하여 열 값을 얻을 수 있습니다. (3) 연결 닫기 con.commit();
참고: 데이터베이스는 연결 개체에 밀접하게 바인딩되어 있으므로 사용 후에는 데이터베이스를 닫아야 합니다.
2, 커서 제어
결과 집합에서 커서의 초기 위치는 결과 집합의 첫 번째 행 앞입니다. 결과 집합은 커서를 아래쪽(뒤로)으로 이동하기 위해 next() 메서드를 호출합니다. 이동이 성공하면 True가 반환되고, 이동이 실패하면 False가 반환됩니다. 결과 집합에서 여러 레코드를 이동하여 표시하려면 스크롤 결과 집합을 반환해야 합니다. 방법은 다음과 같습니다:
con.rollback();
where sub-statement: select field from where 조건을 나타냅니다.
order by 문: 다음과 조합하여 사용할 수 있습니다. where 문
rrreee
three , 업데이트, 추가 및 삭제 작업Java는 보다 효율적인 데이터베이스 작업 메커니즘을 제공하는데, 이는 준비된 문 개체인 ReadyStatement 개체입니다. SQL 문을 데이터베이스의 기본 문으로 처리한 다음 데이터베이스로 전송합니다. 🎜 와일드카드 사용: SQL을 전처리할 때 와일드카드 문자 ?를 사용하여 필드 값을 바꿀 수 있습니다. 전처리 문을 실행하기 전에 와일드카드 문자로 표시되는 특정 값을 설정하면 됩니다. 🎜rrreee🎜🎜 5. 일반 쿼리 🎜🎜🎜 작성 시 일반 쿼리 클래스인 경우 사용자는 데이터베이스 이름과 SQL 문을 이 클래스의 개체에 전달할 수 있으며, 그러면 개체는 2차원 배열을 사용하여 쿼리 레코드를 반환합니다. 🎜 일반 쿼리 클래스를 작성하려면 데이터베이스 테이블 열(필드)의 이름과 개수를 알아야 합니다. 일반적인 방법은 ResultSet 개체 rs를 사용하여Statement 개체는
public int excuteUpdate(String sqlStatement);
를 호출하여 매개변수를 지정하여 데이터베이스 테이블의 레코드를 업데이트, 추가 및 삭제합니다. rrreee4. 준비된 문 사용
getMetaData()
메서드를 호출하여 ResultSetMetaData 개체를 반환하는 것입니다. 🎜rrreee🎜 그런 다음 getColumnCount( )
메서드를 사용하여 getColumnName(int i)
를 호출하면 결과 집합 rs에서 i번째 열의 이름을 반환할 수 있습니다. 🎜🎜🎜 6. 트랜잭션 🎜🎜🎜🎜1. 트랜잭션 및 처리 🎜🎜 트랜잭션은 일련의 SQL 문으로 구성됩니다. 소위 트랜잭션 처리란 애플리케이션 프로그램이 트랜잭션의 모든 SQL 문이 실행되거나 그 중 아무것도 실행되지 않도록 보장하는 것을 의미합니다. 트랜잭션 처리는 데이터베이스 내 데이터의 무결성과 일관성을 보장하는 중요한 메커니즘입니다. 🎜🎜🎜2, JDBC 트랜잭션 처리🎜🎜 자동 모드를 끄려면 setAutoCommit(boolean b) 메서드를 사용하세요. 🎜 즉, 두 가지 관련 작업이 SQL 문의 데이터를 변경해서는 안 됩니다. 둘 다 실행될 때까지 데이터베이스. 방법은 sql 개체를 얻기 전에 연결 개체가 이 메서드를 호출하도록 하는 것입니다. 🎜rrreee🎜 commit() 메서드를 사용하여 트랜잭션을 처리합니다. 🎜 자동 모드를 끈 후 sql 개체가 여러 SQL(즉, 동일한 transaction) 문에 따르면 이 문은 즉시 적용되지 않지만 연결 개체가 메서드를 호출할 때까지는 적용되지 않습니다. 🎜rrreee🎜 트랜잭션을 처리하기 위해 Rollback() 메서드를 사용하지 못한 경우: 🎜 즉, 트랜잭션에 의해 수행되는 작업입니다. con이 트랜잭션 처리를 위해 commit() 메서드를 호출할 때 하나의 SQL 문이 성공적으로 실행되지 않는 한 트랜잭션 실행이 실패하고 SQLException이 발생합니다. 이때 con은 데이터 변경을 일으키는 모든 작업을 실행 취소하기 위해 rollback() 메서드를 호출해야 합니다: 🎜rrreee🎜🎜🎜관련 무료 학습 권장 사항: 🎜🎜🎜mysql 비디오 튜토리얼🎜🎜🎜🎜위 내용은 Java 프로그램 개발 학습 JDBC 및 MySQL 데이터베이스의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!