当前位置:网站首页>Dbutil auxiliary class, manual commit transaction, metadata
Dbutil auxiliary class, manual commit transaction, metadata
2022-06-11 12:58: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
边栏推荐
- 工作总结之因为笛卡尔积问题写SQL搞了半天[害](附笛卡尔积总结)
- PADS使用之繪制原理圖
- C language - data storage
- . 5 string
- 网络信息系统应急响应
- 2022年网上开户是安全的吗?
- How can I use a domain name to access a website?
- Go microservice restful API design standards and practices
- Application of pip2pi, pypiserver and Apache in PIP local source configuration
- Research on DB2 Database Reconstruction and table data migration
猜你喜欢

MCtalk创业声音丨博学明辨:兴趣社交,给退休前后老年朋友的「小而美」空间

【后台交互】select 绑定后台传递的数据

Redis data type daily use scenarios

非标自动化设备制造企业,如何借助ERP系统实现快速精准报价?

Oracle DatabaseLink cross database connection

How can non-standard automation equipment manufacturing enterprises achieve rapid and accurate quotation with the help of ERP system?

How to optimize SEO on the mobile terminal? Do you need to optimize GoogleSEO on the mobile terminal for a separate m domain name?

场馆坪效这么低?关键在这两方面

1. Thread Basics

Audio adaptation of openharmony Standard System Porting
随机推荐
Schéma de dessin utilisé par les Pads
[noip1998] spelling
Schematic drawing for pads
openharmony标准系统移植之音频适配
Syntax of SQL
What are the advantages of comprehensive venues?
PADS使用之绘制原理图
羽毛球馆有哪些创收方式
Quic resistance
Oracle database import data steps
oracle删除用户后,却还可以使用该用户登录
[interface] view the interface path and check the interface
Seckill multi-level cache ----- product details page
字节真的是宇宙尽头吗?
网络信息系统应急响应
Another way to achieve family reunion, 2022 flagship projection nut j10s is planted with grass
Clear the selected data in the modal box after the modal box is closed
从QUIC到TCP
App manual signature of openharmony standard system
ASCII, Unicode, and UTF-8