|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
认真的记,感觉很紧张根本就没有时间和能力,来对技术知识点进行思考。这样课下就只能对知识进行简单的理解,其实简单的理解就是记忆课堂上讲的知识点,已静态创立表为例
(1)
publicclassDataType{
privateintcode;
privateStringSQLType;
privateStringlocalType=null;
privateStringparams=null;
privatebooleanneedsSetting=true;
publicDataType(intcode,StringSQLType){
this.code=code;
this.SQLType=SQLType;
}
publicbooleanneedsToBeSet(){
returnneedsSetting;
}
publicintgetCode(){
returncode;
}
publicStringgetSQLType(){
returnSQLType;
}
publicStringgetLocalType(){
returnlocalType;
}
publicStringgetParams(){
returnparams;
}
publicvoidsetLocalTypeAndParams(Stringlocal,Stringp){
if(needsSetting){
localType=local;
params=p;
needsSetting=false;
}
}
}
(2)
importjava.sql.*;
publicclassSQLTypesCreate{
publicstaticvoidmain(String[]args){
Stringurl="jdbc:oracle:thin:@localhost:1521:oral";
Stringuser="SYSTEM";
Stringpass="manager";
try{
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
}catch(Exceptione){System.out.println(e);}
try{
Connectioncon=DriverManager.getConnection(url,user,pass);
Statementstmt=con.createStatement();
StringtableName;
//创立表语句中的表名变量
StringcolumnName;
//列名变量
StringsqlType;
//数据范例变量
//以上三个变量都是为了创立建表语句服务的
DataType[]typeArray={
newDataType(java.sql.Types.BIT,"BIT"),
newDataType(java.sql.Types.TINYINT,"TINYINT"),
newDataType(java.sql.Types.SMALLINT,"SMALLINT"),
newDataType(java.sql.Types.INTEGER,"INTEGER"),
newDataType(java.sql.Types.BIGINT,"BIGINT"),
newDataType(java.sql.Types.FLOAT,"FLOAT"),
newDataType(java.sql.Types.REAL,"REAL"),
newDataType(java.sql.Types.DOUBLE,"DOUBLE"),
newDataType(java.sql.Types.NUMERIC,"NUMERIC"),
newDataType(java.sql.Types.DECIMAL,"DECIMAL"),
newDataType(java.sql.Types.CHAR,"CHAR"),
newDataType(java.sql.Types.VARCHAR,"VARCHAR"),
newDataType(java.sql.Types.LONGVARCHAR,"LONGVARCHAR"),
newDataType(java.sql.Types.DATE,"DATE"),
newDataType(java.sql.Types.TIME,"TIME"),
newDataType(java.sql.Types.TIMESTAMP,"TIMESTAMP"),
newDataType(java.sql.Types.BINARY,"BINARY"),
newDataType(java.sql.Types.VARBINARY,"VARBINARY"),
newDataType(java.sql.Types.LONGVARBINARY,"LONGVARBINARY"),
newDataType(java.sql.Types.NULL,"NULL"),
newDataType(java.sql.Types.OTHER,"OTHER"),
};
//创立一个数组用用jdbcSQl数据范例的代码和名字初始化,别的为null
//注重,以上呈现的名字全体都是Types类中呈现的
DatabaseMetaDatadbmd=con.getMetaData();
//创立DatabaseMetaData对象,用来猎取数据库的属性
ResultSetrs=dbmd.getTypeInfo();
//猎取数据库撑持的SQL数据范例
while(rs.next()){
intcodeNumber=rs.getInt("DATA_TYPE");
StringdbmsName=rs.getString("TYPE_NAME");
StringcreateParams=rs.getString("CREATE_PARAMS");
//以下是当地数据库撑持的数据范例在jdbc中的映照号,当地名,参数
//System.out.println(codeNumber+""+dbmsName+""+createParams);
for(inti=0;i<typeArray.length;i++){
if(typeArray[i].getCode()==codeNumber){
//假如typeArray中的元素代码即是当地数据库范例的代码,
//就能够把typeArray中的范例名设成从DatabaseMetaData取得的当地名
typeArray[i].setLocalTypeAndParams(
dbmsName,createParams);
System.out.println("婚配的code,SQLType,localType,params有:");
System.out.println(typeArray[i].getCode()+""+
typeArray[i].getSQLType()+""+
typeArray[i].getLocalType()+""+
typeArray[i].getParams());
}
//设定命组中的数据库中的范例名和参数,打印出一切婚配的
}
//endfor
}//endwhile
StringtableNamePrompt="输出表名"+"并回车";
tableName=getInput(tableNamePrompt);
StringcreateTableString="createtable"+tableName+"(";
StringcommaAndSpace=",";
booleanfirstTime=true;
while(true){
System.out.println("");
StringcolumnNamePrompt="输出列名"+"或不输出任何数据然后回车:";
columnName=getInput(columnNamePrompt);
if(firstTime){
if(columnName.length()==0){
System.out.print("最少必要一列;");
System.out.println("请重试");
continue;
}else{
createTableString+=columnName+"";
//持续构成创立表的字符串
firstTime=false;
}
}elseif(columnName.length()==0){
break;
//不输出列时那末创立语句的历程停止
}else{
createTableString+=commaAndSpace
+columnName+"";
}
//在乐成吸收到列名后,以下显现可用的范例名
System.out.println("");
System.out.println("可用的范例名为:");
for(inti=0;i<typeArray.length;i++){
if(!typeArray[i].needsToBeSet()){
//假如设置了当地数据库中的名和参数,申明这个jdbc范例能够用
System.out.println(typeArray[i].getSQLType());
//前往jdbc中对应的SQL范例名
}
}
System.out.println("");
intindex;
while(true){//轮回直到输出可用的范例
StringtypePrompt="从列表中输出列的范例"+
"并回车";
sqlType=getInput(typePrompt);
for(index=0;index<typeArray.length;index++){
if(typeArray[index].getSQLType().
equalsIgnoreCase(sqlType)){
//对照两个字符串是不是相称,不辨别巨细写
//假如有相称的申明输出的范例是jdbc同意的范例,就跳出
break;
}
}
if(index<typeArray.length){
//假如index小于typeArray数组的个数,申明有婚配的
break;
//跳出while(true)轮回
}
System.out.println("");
System.out.print(sqlType+"与同意的范例不婚配");
System.out.println("");
}
Stringparams;
StringlocalTypeName;
params=typeArray[index].getParams();
//猎取范例的参数,此时的index是输出的范例在数组中的索引
localTypeName=typeArray[index].getLocalType();
//猎取数据库中这类范例名
StringparamString;
StringparameterPrompt="输出"+params+":";
paramString="("+getInput(parameterPrompt)+")";
createTableString+=localTypeName+paramString;
//注重,构成创立表字符串的是用当地范例名,不是用jdbc中的范例名
//后面输出的时分用的是jdbc中的名字
}
//创立语句输出部分停止
createTableString+=")";
System.out.println("");
System.out.print("你输出的创立表的语句是:");
System.out.println(createTableString);
System.out.println("");
stmt.execute(createTableString);
//实行创立表的语句
rs=dbmd.getColumns(null,"SYSTEM",tableName.toUpperCase(),"%");
System.out.println("表的信息为:表名,列名,范例号,范例名");
while(rs.next()){
System.out.print(rs.getString("TABLE_NAME")+"");
System.out.print(rs.getString("COLUMN_NAME")+"");
System.out.print(rs.getInt("DATA_TYPE")+"");
System.out.println(rs.getString("TYPE_NAME"));
}
rs.close();
stmt.close();
con.close();
}catch(SQLExceptionex){
System.err.println("SQLException:"+ex.getMessage());
}
}
publicstaticStringgetInput(Stringprompt)throwsSQLException{
System.out.print(prompt);
System.out.flush();
//扫除一切字符
try{
java.io.BufferedReaderbin;
//创立从字符输出流中读取文本的对象
bin=newjava.io.BufferedReader(
//字符流为参数
newjava.io.InputStreamReader(System.in));
//字撙节为参数,转化成字符流
Stringresult=bin.readLine();
returnresult;
//前往字符串
}catch(Exceptione){
System.out.println(e);
return"";
}
}
}
先说优点,首先和C,C++这些语言比起来,java很简单,去掉指针的java,非常好理解,自动垃圾回收机制也很好,自从JDK1.5推出以后,性能上又有了很大提高。 |
|