当前位置:网站首页>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

 

  1. Dbutils auxiliary
  2. Queryrunner: Additions and deletions , If the data is submitted to the database automatically , You must implement a constructor with parameters

  Update()

  Query()

  1. 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

  1. 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
}

  1. 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

  1. ResultSet Metadata resultsetmeatadta

Just remember that Resultset->resultsetmetadata

Connection conn= getdatasourceClass.getdatasourceFunction().getConnection();
 
PreparedStatement pstat=conn.prepareStatement("select * from student_info ");
ResultSet rspstat.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

原网站

版权声明
本文为[The joy of looking up at the stars]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/03/202203012118282507.html