Java Database Derby Instance 1
package com.han.ch20.q1;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import com.han.Derby;
public class UpdateStu {
private static Connection conn;
private static PreparedStatement ps;
private static ResultSet rs;
private static ResultSetMetaData rsmd; // ResultSetMetaData has not the close() method
public static void main(String[] rgs){
Derby.loadDriver();// As is said in the class Derby, this action is not necessary with a JRE 1.6 and later.
try {
// create database "ch20"
conn=Derby.createDatabaseAndGetConnection("ch20", "", "");
// drop the table "tb_emp" if it exists
if(Derby.isTableExists("tb_emp", conn)){
ps=conn.prepareStatement("drop table tb_emp");
ps.execute();
}
// create a table "tb_emp" in this database
ps=conn.prepareStatement("create table tb_emp(id int, name varchar(20), department varchar(20))");
ps.execute();
// add elements into the table
ps=conn.prepareStatement("insert into tb_emp values(?,?,?)");
ps.setInt(1, 1);
ps.setString(2, "Jing LI");
ps.setString(3, "Computer technology");
ps.executeUpdate();
ps.setInt(1, 2);
ps.setString(2, "Hao LI");
ps.setString(3, "Sales department");
ps.executeUpdate();
ps.setInt(1, 3);
ps.setString(2, "Yuanyuan XIONG");
ps.setString(3, "Copumter technology");
ps.executeUpdate();
ps.setInt(1, 4);
ps.setString(2, "Mei LIU");
ps.setString(3, "Sales department");
ps.executeUpdate();
// consult the information associated with the department "Sales department"
ps=conn.prepareStatement("select * from tb_emp where department='Sales department'");
rs=ps.executeQuery();
// display the query results on the console
rsmd=rs.getMetaData();
int numberOfColumns=rsmd.getColumnCount();
String[] columnNames=new String[numberOfColumns];
String[] columnTypeNames=new String[numberOfColumns];
int[] precisions=new int[numberOfColumns];
for(int i=0;i<numberOfColumns;i++){
columnNames[i]=rsmd.getColumnName(i+1);
columnTypeNames[i]=rsmd.getColumnTypeName(i+1);
precisions[i]=rsmd.getPrecision(i+1);
System.out.println(columnNames[i]+" : "
+columnTypeNames[i]+"("
+precisions[i]+")");
}
for(int i=0;i<numberOfColumns;i++){
String columnName=columnNames[i];
if(columnName.length()>precisions[i]){
columnName=columnName.substring(0, precisions[i]);
}
System.out.printf("%-"+precisions[i]+"s|",columnName);
}
System.out.println();
while(rs.next()){
for(int i=0;i<numberOfColumns;i++){
System.out.printf("%-"+precisions[i]+"s|",rs.getObject(i+1));
}
System.out.println();
}
// close the opened resources
rs.close();
ps.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
// perform a clean database closing
Derby.shutdownDatabase("ch20");
Derby.shutdownAll();
}
}
}
package com.han;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Properties;
/**
* The Embedded mode is limited by that we can't run simultaneously
* two programs (two JVM instances) using a same database (databaseName is the same).
* <p>
* But we can instead use the NetworkServer mode to avoid this case,
* it is to say the "Client/Server" mode.
* In this mode, you have to first start the NetworkServer by this command :
* <pre>
* java org.apache.derby.drda.NetworkServerControl start [-h hostIP -p portNumber]
* </pre>
* Or use the API :
* <pre>
* NetworkServerControl serverControl = new NetworkServerControl(InetAddress.getByName("myhost"),1621);
* serverControl.shutdown();
* </pre>
* schema is above the table/view. In MySQL schema is equivalent to database.
* So in MySQL, create database==create schema,
* but create database is not applicable to Java Derby.
* <p>
* In Derby, schema is also equivalent to a user name.
* @author HAN
*
*/
public class Derby {
private static Connection con=null;
private static String port=null;
private static String ip=null;
/**
* The port will be set to default: 1527
*/
public static void setPortToDefault(){
port="1527";
}
public static void setPort(String port){
Derby.port=port;
}
public static void setServer(String ip){
Derby.ip=ip;
}
/**
* This express loading driver is not necessary for Java 6 and later, JDBC 4.0 and later.
* Because it can be added automatically by <code>DriverManager</code> when connecting to a database.
*/
public static void loadDriver(){
//load the driver
if(port==null){
if(ip!=null){
System.out.println("You seem to have set an ip address, if so, you have also to assign a port, or else an embedded database will be automatically used");
}
try {
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
System.out.println("The embedded driver is successfully loaded");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
try{
Class.forName("org.apache.derby.jdbc.ClientDriver");
System.out.println("The client driver is successfully loaded");
}catch(ClassNotFoundException e){
e.printStackTrace();
}
}
}
/**
* create and connect a database
* @param databaseName
* @param user
* @param password
* @return a connection to the URL
* @throws SQLException
*/
public static Connection createDatabaseAndGetConnection(String databaseName, String user, String password) throws SQLException{
//create and connect the database
Properties props=new Properties();
props.put("user",user);
props.put("password",password);
if(port==null){
if(ip!=null){
System.out.println("You seem to have set an ip address, if so, you have also to assign a port before loading the driver, or else an embedded database is automatically used");
}
con=DriverManager.getConnection("jdbc:derby:"+databaseName+";create=true", props);
System.out.println("Connection is successfully established, it uses an Embedded database");
}else if(ip==null){
con=DriverManager.getConnection("jdbc:derby://localhost:"+port+"/"+databaseName+";create=true", props);
System.out.println("Connection is sucessfully established, it uses an network database but stored in the local host via the port: "+port);
}else{
con=DriverManager.getConnection("jdbc:derby://"+ip+":"+port+"/"+databaseName+";create=true", props);
System.out.println("Connection is sucessfully established, it uses an network database whose host ip is: "+ip+" and via the port: "+port);
}
return con;
}
/**
* Shut down a specified database. But it doesn't matter that later we could also connect to another database.
* Because the Derby engine is not closed.
* @param databaseName
*/
public static void shutdownDatabase(String databaseName){
boolean gotSQLExc = false;
if(port==null){
try {
DriverManager.getConnection("jdbc:derby:"+databaseName+";shutdown=true");
} catch (SQLException se) {
if ( se.getSQLState().equals("08006") ) {
gotSQLExc = true;
}
}
if (!gotSQLExc) {
System.out.println("Database did not shut down normally");
} else {
System.out.println("Database: "+databaseName+" shut down normally");
}
}else if(ip==null){
try {
DriverManager.getConnection("jdbc:derby://localhost:"+port+"/"+databaseName+";shutdown=true");
} catch (SQLException se) {
// TODO Auto-generated catch block
if ( se.getSQLState().equals("08006") ) {
gotSQLExc = true;
}
}
if (!gotSQLExc) {
System.out.println("Database did not shut down normally");
} else {
System.out.println("Database: "+databaseName+" shut down normally");
}
}else{
try {
DriverManager.getConnection("jdbc:derby://"+ip+":"+port+"/"+databaseName+";shutdown=true");
} catch (SQLException se) {
if ( se.getSQLState().equals("08006") ) {
gotSQLExc = true;
}
}
if (!gotSQLExc) {
System.out.println("Database did not shut down normally");
} else {
System.out.println("Database: "+databaseName+" shut down normally");
}
}
}
/**
* shut down all opened databases and close the Derby engine.
* The effect is that after the execution of this method, we will not permitted to use Derby again in the rest of our program.
* Or else, an exception of "can't find a suitable driver for [a database URL]" will be thrown.
* However, you can still use another approach to resolve this problem: newInstance()
* For example,
* <pre>
* Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
* </pre>
*/
public static void shutdownAll(){
boolean gotSQLExc = false;
try {
DriverManager.getConnection("jdbc:derby:;shutdown=true");
} catch (SQLException se) {
// TODO Auto-generated catch block
if ( se.getSQLState().equals("XJ015") ) {
gotSQLExc = true;
}
}
if (!gotSQLExc) {
System.out.println("Database did not shut down normally");
} else {
System.out.println("All databases shut down normally and Derby completely closed");
}
}
/**
* Just connect to a database desired by providing the appropriate parameters.
* @param databaseName
* @param user
* @param password
* @return
* @throws SQLException
*/
public static Connection getConnection(String databaseName, String user, String password) throws SQLException{
if(port==null){
if(ip!=null){
System.out.println("You seem to have set an ip address, if so, you have also to assign a port before loading the driver, or else an embedded database is automatically used");
}
con=DriverManager.getConnection("jdbc:derby:"+databaseName,user,password);
System.out.println("Connection is sucessfully established, it uses an Embedded database");
}else if(ip==null){
con=DriverManager.getConnection("jdbc:derby://localhost:"+port+"/"+databaseName,user,password);
System.out.println("Connection is sucessfully established, it uses an network database but stored in the local host via the port: "+port);
}else{
con=DriverManager.getConnection("jdbc:derby://"+ip+":"+port+"/"+databaseName,user,password);
System.out.println("Connection is sucessfully established, it uses an network database whose host ip is: "+ip+" and via the port: "+port);
}
return con;
}
public static HashSet<String> listAllTables(Connection con) throws SQLException{
DatabaseMetaData meta = con.getMetaData();
ResultSet res = meta.getTables(null, null, null, new String[]{"TABLE"});
HashSet<String> set=new HashSet<String>();
while (res.next()) {
set.add(res.getString("TABLE_NAME"));
//use TABLE_SCHEM to view all users or schemas
//set.add(res.getString("TABLE_SCHEM"));
}
System.out.println("All the tables associated to current connection are :");
System.out.println(set);
return set;
}
public static boolean isTableExists(String table, Connection con) throws SQLException{
if(listAllTables(con).contains(table.toUpperCase())){
return true;
}else{
return false;
}
}
public static HashSet<String> listAllSchemas(Connection con) throws SQLException{
DatabaseMetaData meta = con.getMetaData();
ResultSet res = meta.getSchemas(null, null);
HashSet<String> set=new HashSet<String>();
while (res.next()) {
set.add(res.getString("TABLE_SCHEM"));
}
System.out.println("All the schemas associated to current connection are :");
System.out.println(set);
return set;
}
public static HashMap<String, String> listAllSchemasAndTables(Connection con) throws SQLException{
DatabaseMetaData meta = con.getMetaData();
ResultSet res = meta.getTables(null, null, null, new String[]{"TABLE"});
HashMap<String, String> map=new HashMap<String, String>();
while (res.next()) {
map.put(res.getString("TABLE_SCHEM"),res.getString("TABLE_NAME"));
}
System.out.println("All the tables and their corresponding schemas associated to current connection are :");
System.out.println(map);
return map;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.