Java/Database SQL JDBC/SQLException — различия между версиями
Admin (обсуждение | вклад) м (1 версия) |
|
(нет различий)
|
Текущая версия на 09:35, 1 июня 2010
Содержание
Get Error Code, SQL State, Message
<source lang="java">
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class SqlException {
public static void main(String[] args) { Connection conn = null; Statement stmt = null; ResultSet rs = null; try { String driver = "oracle.jdbc.driver.OracleDriver"; Class.forName(driver).newInstance(); System.out.println("Connecting to database..."); String jdbcUrl = "jdbc:oracle:thin:@localhost:1521:ORCL"; conn = DriverManager.getConnection(jdbcUrl, "yourName", "mypwd"); stmt = conn.createStatement(); try { rs = stmt.executeQuery("Select * from no_table_exisits"); } catch (SQLException seRs) { String exMsg = "Message from MySQL Database"; String exSqlState = "Exception"; SQLException mySqlEx = new SQLException(exMsg, exSqlState); seRs.setNextException(mySqlEx); throw seRs; } } catch (SQLException se) { int count = 1; while (se != null) { System.out.println("SQLException " + count); System.out.println("Code: " + se.getErrorCode()); System.out.println("SqlState: " + se.getSQLState()); System.out.println("Error Message: " + se.getMessage()); se = se.getNextException(); count++; } } catch (Exception e) { e.printStackTrace(); } }
}
</source>
Handling a SQL Exception: how to retrieve the information in a SQLException.
<source lang="java">
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class Main {
public static void main(String[] argv) throws Exception { String driverName = "com.jnetdirect.jsql.JSQLDriver"; Class.forName(driverName); String serverName = "127.0.0.1"; String portNumber = "1433"; String mydatabase = serverName + ":" + portNumber; String url = "jdbc:JSQLConnect://" + mydatabase; String username = "username"; String password = "password"; Connection connection = DriverManager.getConnection(url, username, password); try { connection.createStatement().execute("select wrong"); } catch (SQLException e) { while (e != null) { String message = e.getMessage(); String sqlState = e.getSQLState(); int errorCode = e.getErrorCode(); driverName = connection.getMetaData().getDriverName(); if (driverName.equals("Oracle JDBC Driver") && errorCode == 123) { } e = e.getNextException(); } } }
}
</source>
Logging errors to a file
<source lang="java">
import java.io.FileOutputStream; import java.io.PrintStream; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.GregorianCalendar; public class Logging {
public static void main(String args[]) throws Exception { FileOutputStream errors = new FileOutputStream("StdErr.txt", true); PrintStream stderr = new PrintStream(errors); PrintWriter errLog = new PrintWriter(errors, true); System.setErr(stderr); String query = "SELECT Name,Description,Qty,Cost,Sell_Price FROM Stock"; try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con = DriverManager.getConnection("jdbc:odbc:Inventory"); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(query); while (rs.next()) { String name = rs.getString("Name"); String desc = rs.getString("Description"); int qty = rs.getInt("Qty"); float cost = rs.getFloat("Cost"); } } catch (ClassNotFoundException e) { e.printStackTrace(errLog); } catch (SQLException e) { System.err.println((new GregorianCalendar()).getTime()); System.err.println("Thread: " + Thread.currentThread()); System.err.println("ErrorCode: " + e.getErrorCode()); System.err.println("SQLState: " + e.getSQLState()); System.err.println("Message: " + e.getMessage()); System.err.println("NextException: " + e.getNextException()); e.printStackTrace(errLog); System.err.println(); } stderr.close(); }
}
</source>
Print the stack trace for a SQLException to STDERR.
<source lang="java">
import java.io.PrintWriter; import java.sql.SQLException; /*
* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * */
public class Main {
/** * Print the stack trace for a SQLException to STDERR. * * @param e SQLException to print stack trace of */ public static void printStackTrace(SQLException e) { printStackTrace(e, new PrintWriter(System.err)); } /** * Print the stack trace for a SQLException to a * specified PrintWriter. * * @param e SQLException to print stack trace of * @param pw PrintWriter to print to */ public static void printStackTrace(SQLException e, PrintWriter pw) { SQLException next = e; while (next != null) { next.printStackTrace(pw); next = next.getNextException(); if (next != null) { pw.println("Next SQLException:"); } } }
}
</source>