当前位置:网站首页>Dbutil auxiliary class, manual commit transaction, metadata
Dbutil auxiliary class, manual commit transaction, metadata
2022-06-09 07:44:00 【The joy of looking up at the stars】
Apache dbutil There are many classes in this package , Mainly the following three
- Dbutils auxiliary
- Queryrunner: Additions and deletions , If the data is submitted to the database automatically , You must implement a constructor with parameters
Update()
Query()
- If it's a query , Need to use resultsetHandler Interface , There are many implementation classes , An implementation class corresponds to a different query type
( Corresponding to different return value types )
QueryRunner runner=new QueryRunner(getdatasourceClass.getdatasourceFunction());
ArrayHandler Return the first row of data in the result set , And use object Array receive
Object[] student=runner.query("select * from student_info where id>?",new ArrayHandler(),1);
System.out.print(student[1]);
ArrayListHandler With list And an array to return the result set ,list There is one in every line of the object Array
List<Object[]> students=runner.query("select * from student_info where id>?",new ArrayListHandler(),1);
for(Object[] student:students)
{System.out.print(student[0]);}
BeanHandler Returns the first row of data in the result set as a class , Note that the variable name in the class should be consistent with the table
Student student=runner.query("select * from student_info where id>?",new BeanHandler <Student> (Student.class),1);//Student.class yes java Reflection of , Don't understand, , Write this to automatically put the query results in student In the object
System.out.print(student.getLoc());
BeanListHandler Return multiple rows of data in the result set with list<student> receive
List<Student> students=new ArrayList<>();
students=runner.query("select * from student_info where id>?",new BeanListHandler<Student>(Student.class),1);
BeanMapHandler Number the result set , return map oracle The default data type in is decimal type ,java neutralization decimal The corresponding is bigdecimal type
Map<BigDecimal,Student> students=runner.query("select * from student_info where id>?",newBeanMapHandler<BigDecimal,Student>(Student.class,"id"),1);
Student stu=students.get( new BigDecimal(1));
MapHandler With map Returns the first row of query results in
Map<String,Object> student =runner.query("select * from student_info where id>?",new MapHandler(),1);
System.out.print(student);//
result :{ID=2, NAME=name2, PWD=pwd2, LOC=loc2}
<String,Object> It's a rule to put this map The format of ,key yes string,value yes object
MapListHandler Return multiple rows of results in the result set
List< Map<String,Object>> student =runner.query("select * from student_info where id>?",new MapListHandler(),1);
System.out.print(student);
result :[{ID=2, NAME=name2, PWD=pwd2, LOC=loc2}, {ID=5, NAME=name5, PWD=loc5, LOC=psw5}]
List Put in map
Columnlisthander: Put a column in the result ( Like all of them id), Save in list
List< String> student =runner.query("select * from student_info where id>?",new ColumnListHandler<String>("loc"),1);
System.out.print(student);
among object…paramas Represents a variable parameter : You can write a single value , You can also write arrays
Object[] student=runner.query("select * from student_info where id>? And name like ?",new ArrayHandler(),new Object[]{ 1,"%n%"});
System.out.print(student[0]);
Maybe because jar Package version problem , When the parameter is an array ( The above sentence ) Perform error , Just change another version
increase ( Auto commit transaction )
int result= runner.update(" insert into student_info values(?,?,?,?)",new Object [ ] { 6,"name6","loc6","psw6"} );
System.out.print(result);
Delete ( Auto commit transaction )
int result= runner.update(" delete from student_info where id=?",2 );
System.out.print(result);

Commit transactions manually :
Transfer accounts , There should be two steps , First reduce Zhang San's money , Give Li Si more money . Or at the same time , Or fail at the same time .
step :
If you want to ensure data security , But also to ensure performance , have access to threadlocal
Connection Can not be further divided , One connection Only one addition, deletion, modification and query can be completed , And when it's done, submit , But I need to add, delete, modify and check many times , Submit again , You use threadlocal, At the first dao In operation Really created a connection object , Then several other times dao In operation , With the help of t1 Its own characteristics The connection Duplicate multiple (connection Only one... Was created , So it's time to connection All operations in Must correspond to the same transaction ) also t1 take connection Multiple... Are copied at the use level , Therefore, multiple... Can be completed at the same time dao operation , Submit only once .
Threadlocal: Make a copy for each thread , Each thread can access its own internal copy , Alias thread local variable
Set() to t1 Store a variable in
Get() from t1 Get variables in ( copy )
Remove() Delete copy
For databases , One connection corresponds to one transaction , A transaction can contain multiple dml operation ( Additions and deletions )
All objects . Methods need to judge whether they are empty
Transaction flow : Open transaction ( Changing automatic commit to manual commit is to start the transaction )
Carry on all kinds of dml operation normal Will just all dml Submit all
Failure ( abnormal ) Will just all dml Roll back all ( All failed )
Metadata : Data that describes data
Three types of : Database metadata 、 Parameter metadata 、 ResultSet Metadata
- Database metadata DataBaseMetaData
Database metadata includes Database name Database version information Driver name url user name
Just remember that Connection ->databasemetadata->. The acquisition method of database metadata can
Connection conn= getdatasourceClass.getdatasourceFunction().getConnection();
DatabaseMetaData dbmetadata =conn.getMetaData();
String dbname=dbmetadata.getDatabaseProductName();// Returns the database name
System.out.println(dbname);
String username=dbmetadata.getUserName();// Get username
System.out.println(username);
String dbversion=dbmetadata.getDatabaseProductVersion();// Get the version information of the database
System.out.println(dbversion);
String drivername=dbmetadata.getDriverName();// Get driver name
System.out.println(drivername);
Specify the primary key information of the table getprimarykeys()
ResultSet rs=dbmetadata.getPrimaryKeys(null,username,"STUDENT_INFO");
// The first parameter is category information , Usually it is null If the second one is oracle database , Capitalized user name , The third is the upper case table name
while (rs.next())
{
Object tablename=rs.getObject(1);// Table category
Object tablename=rs.getObject(2);// Table mode
Object tablename=rs.getObject(3);// The name of the table
Object columnname=rs.getObject(4);// Primary key name
Object columnname=rs.getObject(5);// The serial number of the primary key
Object columnname=rs.getObject(6);// Constraint name of primary key
}
- Parameter metadata
Connection conn= getdatasourceClass.getdatasourceFunction().getConnection();
PreparedStatement pstat=conn.prepareStatement("select * from student_info where id>?",0);
ParameterMetaData prematacount= pstat.getParameterMetaData();
int count=prematacount.getParameterCount();
System.out.println(count);
Just remember that connection-》 Pstat-》 parameterMeatadata-》. The acquisition method of
- ResultSet Metadata resultsetmeatadta
Just remember that Resultset->resultsetmetadata
Connection conn= getdatasourceClass.getdatasourceFunction().getConnection();
PreparedStatement pstat=conn.prepareStatement("select * from student_info ");
ResultSet rs= pstat.executeQuery();
ResultSetMetaData data= rs.getMetaData();
System.out.println(data.getColumnCount());// The returned result set has several columns ( There are several properties )
System.out.println(data.getColumnName (i));// Return result set No i Column name
System.out.println(data.getColumnTypeName (i));// Return result set No i The type of the column
边栏推荐
- 线程池的使用
- 朴素贝叶斯分类器
- YOLOv5添加注意力机制的具体步骤
- Fabric. JS activation input box
- 浅谈数据库优化(以mysql为例)
- PHP date format conversion simplified month day without 0, for example: 22.2.9
- Résumé des connaissances de base redis (hyper détaillé)
- Selenium: Introduction
- Web comprehensive performance test model
- 【6月第一周学习记录】UU-Computer vision(1):3D reconstruction&Camera calibration
猜你喜欢

蓝桥杯电子类单片机第十一届决赛试题

MySQL recursively queries all child nodes according to the parent node, and the list to tree structure tool class

Squid proxy application

How to solve security problems in low code platforms?

redis核心知識點總結(超詳細)

Talk about the ten mistakes often made in implementing data governance

On database optimization (taking MySQL as an example)

多余的时间不要浪费,玩玩手机可开启“副业人生”

High precision personnel positioning system, power plant indoor positioning application solution

Unity imitates flying birds (2) add protagonists
随机推荐
pushmall推贴共享电商2022年5月份计划更新完成
Installing MySQL using docker
Use of qflags flag class
Fabric.js 激活输入框
WPF data binding (II)
2022年最新山西建筑安全员模拟题库及答案
(13) Cross compilation and memory leak detection of Valgrind on ARM
Multithreading - the concept of program process threads
How about opening an account for shares of tongdaxin? Is it safe to open an account?
SQLZOO刷题记录-2
Read dates in various formats from excel and convert them to target formats
Record some common C library functions and UNIX system calls
Opengauss database operation steps
error converting YAML to JSON: yaml: line 10: found character that cannot start any token
Producer consumer issues
(十三)valgrind在ARM上交叉编译和内存泄漏检测
mysql常见面试知识点
Simulated question bank and answers for the 2022 National latest fire facility operator (intermediate fire facility operator) examination
Talk about the ten mistakes often made in implementing data governance
线程池的使用