Joe Wilson wrote:
> Long/short column names in result sets have always been unpredictable 
> in sqlite - especially when joins, unions and subqueries are used.
> I can't see how you can implement this behavior outside of sqlite 
> itself or without parsing and understanding SQL syntax and name 
> resolution rules. Otherwise, you risk breaking working programs.
>   
Hurray, I have found the solution of my original problem 
<http://groups.google.com/group/sqlitejdbc/browse_thread/thread/555416d40c3d7fb7>.

If I use

    Statement st = connection.createStatement();
    *st.execute("PRAGMA full_column_names = 1");
    st.execute("PRAGMA short_column_names = 0" );*

I can use

    ResultSet rs = connection.createStatement().executeQuery(
        "SELECT * FROM sqlitetest p1, sqlitetest p2 "
            + "WHERE p1.value = p2.value AND p1.id < p2.id");
    while (rs.next()) {
        int first = *rs.getInt("p1.id")*;
        int second = *rs.getInt("p2.id")*;
        System.out.println(first + " - " + second);
    }

Why is it not too good? I must use

    rs = connection.createStatement().executeQuery("SELECT * FROM
    sqlitetest");
    while (rs.next()) {
        System.out.println(*rs.getInt("sqlitetest.id")*);
    }

So it doesn't understand *rs.getInt("id")*;

But… I am currently happy!
Thank you for SQLite JDBC driver!

Regards,
Máté.



--~--~---------~--~----~------------~-------~--~----~
Mailing List: http://groups.google.com/group/sqlitejdbc?hl=en
To unsubscribe, send email to [EMAIL PROTECTED]
-~----------~----~----~----~------~----~------~--~---

package sqliteTest;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * @author FARKAS, Máté
 * @version 2008.05.10. 11:54:47
 */
public class SQLiteTest {
	private final static String MySQLDatabase = "//localhost:8508/javatest?user=root";
	private final static String SQLiteDatabase = ":memory:";
	private Connection connection;

	private SQLiteTest() throws SQLException {
		if (1 == 1) {
			loadDriver("SQLite");
		} else {
			loadDriver("MySQL");
		}
		createDatabase();
		crossJoinTest();
	}

	private void crossJoinTest() throws SQLException {

		ResultSet rs = connection.createStatement().executeQuery(
		    "SELECT * FROM sqlitetest p1, sqlitetest p2 "
		        + "WHERE p1.value = p2.value AND p1.id < p2.id");
		System.out.println("Pairs:");
		while (rs.next()) {
			int first = rs.getInt("p1.id");
			int second = rs.getInt("p2.id");
			System.out.println(first + " - " + second);
		}

		rs = connection.createStatement().executeQuery("SELECT * FROM sqlitetest");
		System.out.println("Singles:");
		while (rs.next()) {
			System.out.println(rs.getInt("sqlitetest.id"));
		}

	}

	private void createDatabase() throws SQLException {
		Statement statement = connection.createStatement();
		try {
			statement.executeUpdate("DROP TABLE sqlitetest");
		} catch (Exception e) {}
		statement.executeUpdate("CREATE TABLE sqlitetest "
		    + "(id INTEGER PRIMARY KEY, value INTEGER)");
		statement.executeUpdate("INSERT INTO sqlitetest VALUES (1,1)");
		statement.executeUpdate("INSERT INTO sqlitetest VALUES (2,1)");
		statement.executeUpdate("INSERT INTO sqlitetest VALUES (3,2)");
		statement.executeUpdate("INSERT INTO sqlitetest VALUES (4,2)");
		statement.executeUpdate("INSERT INTO sqlitetest VALUES (5,3)");
		statement.executeUpdate("INSERT INTO sqlitetest VALUES (6,3)");
	}

	private void loadDriver( String driverName ) {
		try {
			if (driverName.toLowerCase().equals("sqlite")) {
				Class.forName("org.sqlite.JDBC");
				connection = DriverManager.getConnection("jdbc:sqlite:"
				    + SQLiteDatabase);

				Statement st = connection.createStatement();
				st.execute("PRAGMA full_column_names = 1");
				st.execute("PRAGMA short_column_names = 0");

				System.out.println("SQLite loaded successful!");
			} else {
				Class.forName("com.mysql.jdbc.Driver");
				connection = DriverManager.getConnection("jdbc:mysql:" + MySQLDatabase);
				System.out.println("MySQL loaded successful!");
			}
		} catch (Exception e) {
			throw new RuntimeException("Cannot load " + driverName + "!", e);
		}
	}

	public static void main( String[] args ) throws Exception {
		new SQLiteTest();
	}
}

Reply via email to