JDBC-Programm wählen Sie Daten aus einer Tabelle und einfügen in eine andere Tabelle in andere db
ich bin neu in java bin, bin ich versucht, legen Sie eine Daten-von old_db zu new_db.
ich habe versucht ein Programm zu tun, dass seine zeigt eine Fehlermeldung "syntax error" kann nicht finden was der Fehler ist.
das Programm getconnection 2 postgres-db und wählen Sie Daten in eine Tabelle und legen Sie Sie in
eine weitere Datenbank-Tabelle. beide Tabelle haben die gleichen Felder und Datentyp.
import java.sql.* ;
public class con2
{
public static void main( String[] args )
{
try
{
Connection con = DriverManager.getConnection( "jdbc:postgresql://localhost:5432/old_db","postgres","password");
try
{
Connection con1 = DriverManager.getConnection( "jdbc:postgresql://localhost:5432/new_db","postgres","password");
Statement st = con.createStatement();
Statement st1 = con1.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM users");
int val = st1.executeUpdate("insert into users("+"'rs()'"+")");
rs.close();
st.close();
st1.close();
}
catch(SQLException e)
{
System.out.println( "could not get JDBC connection for new_db: " + e );
}
}
catch(SQLException e)
{
System.out.println( "could not get JDBC connection for old_db: " + e );
}
}
}
ich bin mit jdbc4
- Ihre Programm nicht entgehen Daten und ist sehr anfällig für SQL-injection-Angriffe. Siehe en.wikipedia.org/wiki/SQL_injection und bobby-tables.com . 1, weil Sie immer den genauen text der Fehlermeldung wenn Sie Fragen, Menschen zu helfen, Sie mit ihm.
- Vielleicht nicht so anfällig, da keine Daten übergeben. Aber es ist ein Gültiger Punkt für ein richtiges Programm.
- Sicher, die Daten werden übergeben, in der - aus der anderen Datenbank. Wo ein korrekt geschrieben, aber nicht sehr paranoid-Programm könnte gut eingefügt haben
');--drop schema public;--
in ein Feld, das verwendet man aufgrund des gescheiterten Angriffs auf Sie. XSS-Stil Angriffe sind durchaus möglich, mit SQL-injection. - Vereinbarte; Ihr Punkt ist gut getroffen, Craig Ringer.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe ein Programm geschrieben, wie unten gezeigt, es funktioniert.
Danke für die Vorschläge.
Dies ist ganz falsch:
Haben Sie zur Iteration über die
ResultSet
undINSERT
jede Zeile.Ich würde empfehlen, eine
PreparedStatement
zu bind-Variablen und einer batch -INSERT
.Gibt es viele andere Dinge, die ich würde empfehlen, dass Sie sich ändern, aber beginnen Sie mit, und machen das code-Arbeit.
Zwei try/catch-Blöcke auf diese Weise verschachtelt, ist eine schlechte Idee. Tun.
Schließen Sie Ihre Ressourcen in einen finally-block.
Dies ist nur ein Beispiel, aber warum haben Sie zu WÄHLEN und bringen die Daten in die middle tier überhaupt?
... Und warum legen Sie die Daten, die bereits vorhanden ist?
Die Frage, wie gestellt, macht keinen Sinn überhaupt. Die Abstimmung zu schließen.
Einen anderen Weg, dies zu tun ist mit DBLinks in PostgreSQL.