DSN được chỉ định chứa sự không khớp về kiến ​​trúc giữa Trình điều khiển và Ứng dụng. JAVA


85

Tôi đang cố gắng kết nối với cơ sở dữ liệu do MS Access tạo bằng Java, nhưng dường như tôi không thể quản lý được. Tôi đang sử dụng ODBC và tôi nhận được ngoại lệ này:

java.sql.SQLException: [Microsoft] [Trình quản lý trình điều khiển ODBC] DSN được chỉ định chứa sự không khớp về kiến ​​trúc giữa Trình điều khiển và Ứng dụng

Java của tôi:

package javaapplication2;

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


/**
 *
 * @author Owner
 */
public class JavaApplication2 {

    /**
     * @param args the command line arguments
     * 
     */


    public static void main(String[] args) {
        // TODO code application logic here
        try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            String sourceURL = new String("jdbc:odbc:myDatabase");
            System.out.println(sourceURL);
            Connection dbConnection = DriverManager.getConnection(sourceURL,"admin","");

            Statement myStmt  = dbConnection.createStatement();

            String query = "INSERT INTO People(ID, Name, Surname, Age, Contact, Location, Course) VALUES"
                    + " (1007, 'Elroy', 'Smith', '33', 21366688, 'Somewhere', 'somecourse')";

            myStmt.executeUpdate(query);

            ResultSet results = myStmt.executeQuery("SELECT * FROM People");

            while(results.next())
            {
                System.out.print(results.getString(1));
                System.out.print(results.getString(2));
                System.out.print(results.getString(3));
                System.out.println(results.getString(4));

            }

            results.close();

        }
        catch(ClassNotFoundException cnfe)
        {
            System.out.println(cnfe);
        }
        catch(SQLException sqle)
        {
            System.out.println(sqle);
        }
    }
}

2
Bạn có đang sử dụng jvm 64-bit không? Nếu vậy, bạn cần một trình điều khiển odbc 64-bit.
dogbane

1
Vâng, tôi nghĩ là tôi. Tôi đã tìm thấy phiên bản 64bit của odbc trong C: \ Windows \ SysWOW64 nhưng nó không giống với phiên bản mà bảng điều khiển bật.
user1028408

Không thể cài driver 64bit nguyên nhân sản phẩm văn phòng khác của tôi là 32bit: /
DavidVdd

Câu trả lời:


128

Không ai trong số này làm điều đó cho tôi. Tôi đã tìm thấy câu trả lời trên MSDN. Đã có gợi ý cho nó mặc dù. Kiến trúc trong lỗi đề cập đến 32 so với 64 bit. Giải pháp của tôi là tìm ra ứng dụng của tôi đang chạy trong (Access) 2010 là 32b. Tôi tìm thấy điều này bằng cách tìm trong tab Quy trình của Trình quản lý Tác vụ, nơi tất cả các quy trình 32b đều có * 32 ở cuối tên của chúng. Như đã nói, bảng điều khiển sẽ khởi chạy phiên bản ODBC 64 bit từ đây

c:\windows\system32\odbcad32.exe

và phiên bản 32 bit ở đây:

c:\windows\sysWOW64\odbcad32.exe (dễ dàng nhất để sao chép và dán vào hộp thoại đang chạy)

Vì vậy, tôi đã thiết lập DSN có tên kết thúc bằng 32 và 64 trong mỗi bảng điều khiển ODBC tương ứng (Quản trị viên AKA) trỏ đến cùng một thứ. Sau đó, tôi chọn / chọn đúng dựa trên việc ứng dụng sử dụng nó là 32b hay 64b.


Tôi đã thử phiên bản 64 bit và chạy nó với tư cách quản trị viên, nhưng nó cũng không hoạt động !!
Fatima Zohra

2
Phải có sự hài hòa bit. Nếu ứng dụng là 32, thì phải có cấu hình 32 bit cho nó. Nếu ứng dụng là 64, bạn phải có một cái đó là 64. Tôi đã không thử tạo các cấu hình có cùng tên vì tôi không muốn chúng không đồng bộ (quên thay đổi cả hai cùng một lúc). Bạn đã không cung cấp cho tôi đủ thông tin để cố gắng đưa ra các đề xuất. Tôi hy vọng bạn đã tìm ra nó. (Tại sao họ không thể làm điều như vậy rất đơn giản và tạo ra một ứng dụng 64 bit dùng để cấu hình cả hai môi trường 64 và 32 bit ???)
Pecos Bill

Và như đã nêu dưới đây chưa rõ ràng, các trình điều khiển liên quan cũng phải phù hợp (có lẽ tốt nhất là cài đặt cả 32 và 64) mặc dù tôi không nghĩ rằng bạn có thể chọn trình điều khiển nếu nó không phải là kiến ​​trúc phù hợp.
Pecos Bill vào

Điều này cũng giúp tôi giải mã lý do tại sao Excel 32 bit của tôi không thể kết nối với Máy chủ Hadoop Hive của chúng tôi bằng Trình điều khiển ODBC Cloudea Hive 64 bit. Khi tôi chuyển sang đầu nối 32bit, nó hoạt động rất tốt!
Mark Vickery

2
Vì vậy, cần rõ ràng: Bạn không thể thiết lập kết nối ODBC PostgreSQL 32 bit thông qua GUI Windows bình thường trên hệ thống 64 bit. Thay vào đó, bạn cần đóng Quản trị viên nguồn dữ liệu ODBC (nếu nó hiện đang mở), chạy c:\windows\sysWOW64\odbcad32.exevà định cấu hình kết nối từ đó. Sau đó, bạn có thể sử dụng kết nối đó trong chương trình 32 bit để truy cập cơ sở dữ liệu.
Ajedi32

26

Bạn gặp lỗi chính xác này khi cố gắng kết nối với cơ sở dữ liệu MySQL từ MS-Access khi phiên bản bit (32 so với 64) của Access không khớp

  1. phiên bản bit của Trình điều khiển ODBC mà bạn đang sử dụng
  2. phiên bản bit của Trình quản lý ODBC mà bạn đã sử dụng để thiết lập nó.

Đối với những người trong số các bạn đang cố gắng kết nối MS-Access với MySQL trên hệ thống Windows 64 bit, tôi đã phải trải qua rất nhiều thử thách khi cố gắng làm cho nó hoạt động với cả MS-Access 2010 và MS-Access 2013. Cuối cùng thì nó cũng hoạt động, và đây là những bài học tôi đã học được trong suốt quá trình:

Tôi đã mua một máy tính xách tay Windows 7, 64 bit mới và tôi có một ứng dụng dựa trên MS-Access sử dụng bảng MySQL.

  1. Tôi đã cài đặt phiên bản mới nhất của MySQL, 5.6, bằng cách sử dụng cài đặt gói Tất cả Trong Một. Điều này cho phép bạn cài đặt cả cơ sở dữ liệu và trình điều khiển ODBC cùng một lúc. Điều đó thật tuyệt, nhưng trình điều khiển ODBC mà nó cài đặt có vẻ là 64 bit, vì vậy nó sẽ không hoạt động với MS-Access 32 bit. Nó cũng có vẻ như một chút lỗi - không chắc chắn về điều đó. Khi bạn Thêm DSN mới trong Trình quản lý ODBC, trình điều khiển này xuất hiện dưới dạng "Microsoft ODBC For Oracle". Tôi không thể làm cho cái này hoạt động. Tôi đã phải cài đặt 32 bit, được thảo luận bên dưới.

    • MySQL đã hoạt động tốt sau khi cài đặt. Tôi đã khôi phục cơ sở dữ liệu MySQL ứng dụng của mình theo cách thông thường. Bây giờ tôi muốn kết nối với nó bằng MS-Access.


  2. Trước đây tôi đã cài đặt Office 2013, mà tôi cho là 64 bit. Nhưng khi kiểm tra phiên bản (Tệp, Tài khoản, Giới thiệu về Quyền truy cập), tôi thấy rằng nó là 32 bit. Cả Access 2010 và 2013 đều được bán phổ biến nhất dưới dạng phiên bản 32-bit.

  3. Máy của tôi là máy 64 bit. Vì vậy, theo mặc định, khi bạn thiết lập DSN của mình cho MS-Access và đi theo cách thông thường vào Trình quản lý ODBC thông qua Bảng điều khiển, Tùy chọn quản trị, bạn sẽ có trình quản lý ODBC 64 bit. Bạn không có cách nào để biết điều đó! Bạn chỉ không thể nói. Đây là một món gotcha lớn !! Không thể thiết lập DSN từ đó và kết nối thành công với MS Access 32 bit. Bạn sẽ gặp phải lỗi đáng sợ:

    "dsn được chỉ định chứa một kiến ​​trúc không khớp ..."

  4. Bạn phải tải xuống và cài đặt trình điều khiển ODBC 32 bit từ MySQL. Tôi đã sử dụng phiên bản 3.5.1

    http://dev.mysql.com/downloads/connector/odbc/3.51.html

  5. Bạn phải yêu cầu Trình quản lý ODBC trong Bảng điều khiển thực hiện một bước đi bộ và thay vào đó phải gọi rõ ràng Trình quản lý ODBC 32 bit với lệnh này được thực thi tại dấu nhắc Bắt đầu, Lệnh:

    c: \ windows \ sysWOW64 \ odbcad32.exe

    Tôi đã tạo một lối tắt đến cái này trên màn hình của mình. Từ đây, hãy xây dựng DSN của bạn với người quản lý này. Điểm quan trọng: XÂY DỰNG CHÚNG LÀ DSNS HỆ THỐNG, KHÔNG PHẢI LÀ DSNS NGƯỜI DÙNG! Điều này đã khiến tôi vấp ngã trong một thời gian.

    Nhân tiện, phiên bản 64 bit của Trình quản lý ODBC cũng có thể được chạy rõ ràng như sau:

    c: \ windows \ system32 \ odbcad32.exe

  6. Khi bạn đã cài đặt Trình điều khiển ODBC 32-bit từ MySql, khi bạn nhấp vào Thêm trong Trình quản lý ODBC, bạn sẽ thấy 2 trình điều khiển được liệt kê. Chọn "MySQL ODBC 5.2 ANSI Driver". Tôi đã không thử trình điều khiển UNICODE.


Điều đó làm được. Khi bạn đã xác định DSN của mình trong trình quản lý ODBC 32 bit, bạn có thể kết nối với MySQL theo cách thông thường từ bên trong Access - Dữ liệu bên ngoài, Cơ sở dữ liệu ODBC, Liên kết đến Cơ sở dữ liệu, chọn Nguồn dữ liệu máy và DSN bạn đã tạo cho MySQL của mình cơ sở dữ liệu sẽ ở đó.


2
Tôi nghĩ rằng bạn đã chuyển đổi đường đi cho hai Người quản lý ODBC32 bit: c:\windows\system32\odbcad32.exe 64 bit: c:\windows\sysWOW64\odbcad32.exe
Jrgns

3
@Jrgns Không, chúng không được chuyển đổi. sysWOW64thực sự là thư mục 32-bit. Windows rất khó hiểu. Bạn sẽ biết mình đang sử dụng phiên bản nào vì nó sẽ hiển thị (32-bit) hoặc (64-bit) trong thanh tiêu đề của Quản trị viên nguồn dữ liệu ODBC.
Tim Leaf

8

Có một kiến ​​trúc không phù hợp. Trình điều khiển JDBC và JDK của bạn phải có cùng kiến ​​trúc. Nếu bạn sử dụng Trình điều khiển 32bit và JDK của bạn là 64bit, bạn sẽ gặp lỗi đó.

Xem này

Khắc phục: Phụ thuộc vào kiến ​​trúc của bạn.

Bạn sẽ cần trình điều khiển 64-bit nếu Java của bạn là 64-bit.

Tải xuống: http://www.microsoft.com/downloads/details.aspx?familyid=C06B8369-60DD-4B64-A44B-84B371EDE16D&displaylang=vi


Tôi đã tải xuống và thử chuỗi kết nối mới như được chỉ định trong hướng dẫn nhưng nó vẫn không hoạt động. Có lẽ tôi đang làm gì đó sai?
user1028408

2

Tôi đã thấy câu trả lời này và nó đã làm việc cho tôi. https://msdn.microsoft.com/en-us/library/ms712362%28v=vs.85%29.aspx

Sau khi bạn đã cài đặt trình điều khiển ODBC từ chương trình thiết lập trình điều khiển, bạn có thể xác định một hoặc nhiều nguồn dữ liệu cho nó. Tên nguồn dữ liệu (DSN) phải cung cấp một mô tả duy nhất về dữ liệu; ví dụ: Bảng lương hoặc Tài khoản phải trả. Nguồn dữ liệu người dùng và hệ thống được xác định cho tất cả các trình điều khiển hiện được cài đặt được liệt kê trong tab User DSN hoặc System DSN của hộp thoại Quản trị viên nguồn dữ liệu ODBC. Các nguồn dữ liệu tệp trong một thư mục nhất định được liệt kê trong tab Tệp DSN; thư mục sẽ hiển thị được nhập vào hộp Tìm trong tab File DSN. System_CAPS_noteNote

Để quản lý nguồn dữ liệu kết nối với trình điều khiển 32 bit trên nền tảng 64 bit, hãy sử dụng c: \ windows \ sysWOW64 \ odbcad32.exe. Để quản lý nguồn dữ liệu kết nối với trình điều khiển 64 bit, hãy sử dụng c: \ windows \ system32 \ odbcad32.exe. Trong Công cụ quản trị trên hệ điều hành Windows 8 64-bit, có các biểu tượng cho cả hộp thoại Quản trị viên nguồn dữ liệu ODBC 32-bit và 64-bit.

Nếu bạn sử dụng odbcad32.exe 64 bit để định cấu hình hoặc xóa DSN kết nối với trình điều khiển 32 bit, ví dụ: Trình điều khiển do Microsoft Access (* .mdb), bạn sẽ nhận được thông báo lỗi sau:

DSN được chỉ định có cấu trúc không khớp giữa Trình điều khiển và Ứng dụng

Để giải quyết lỗi này, hãy sử dụng odbcad32.exe 32-bit để định cấu hình hoặc xóa DSN.

Nguồn dữ liệu liên kết trình điều khiển ODBC cụ thể với dữ liệu bạn muốn truy cập thông qua trình điều khiển đó. Ví dụ: bạn có thể tạo một nguồn dữ liệu để sử dụng trình điều khiển ODBC dBASE để truy cập một hoặc nhiều tệp dBASE được tìm thấy trong một thư mục cụ thể trên đĩa cứng hoặc ổ đĩa mạng của bạn. Sử dụng Quản trị viên nguồn dữ liệu ODBC, bạn có thể thêm, sửa đổi và xóa nguồn dữ liệu, như được mô tả trong bảng sau.


Xin chào Bineesh Kumar, bạn có thể vui lòng giải thích về breafly không
Raj Kumar

2

Theo mặc định, Command Prompt được kết nối với System32. Chạy dấu nhắc lệnh 64 bit, tức là C:\WINDOWS\SYSWOW64\CMD.EXE,. Trong đó, biên dịch và chạy ứng dụng java của bạn.


2

Để giải quyết vấn đề này trước tiên hãy đảm bảo rằng phần mềm java của bạn phải là phiên bản 32 bit nếu đó là phiên bản 64 bit rõ ràng nó sẽ hiển thị lỗi không khớp vì vậy hãy thử cài đặt lại 32 bit của phiên bản java và thực hiện chương trình java trong lệnh c: \ windows \ sysWOW64 \ odbcad32.exe (dễ sao chép và dán vào hộp thoại đang chạy) vậy là đủ chương trình của bạn chắc chắn hoạt động


1

Vấn đề bạn đang gặp phải có thể là do: bạn đang sử dụng Office 32 bit và Command Prompt 64 bit. Để giải quyết vấn đề, bạn cần làm theo 2 bước:

  1. Mở Trình quản lý ODBC cho DSN bằng: C: \ Windows \ SysWOW64 \ odbcad32.exe Thao tác này sẽ mở Trình quản trị dữ liệu ODBC cho phiên bản 32 bit và bạn sẽ thấy tất cả các trình điều khiển cơ sở dữ liệu.

  2. Sau đó, bạn cần mở dấu nhắc lệnh 32 bit bằng: C: \ Windows \ SysWOW64 \ cmd.exe Thao tác này sẽ mở phiên bản 32 bit của dấu nhắc lệnh. Trong CMD mới này, vui lòng biên dịch lại chương trình Java của bạn và chạy chương trình của bạn.

Hy vọng điều này sẽ giúp ích.


1

Hơi muộn, nhưng vì tôi đã gặp phải vấn đề tương tự, trong kịch bản chính xác của bạn, tôi nghĩ rằng tôi sẽ thêm giải pháp của mình.

Tôi có Windows 7 (64-bit) và Office 2010 (32-bit). Tôi đã thử với chuỗi kết nối không có DSN:

jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=I:/TeamForge/ORS/CTFORS.accdb

và tôi đã thử với kết nối DSN, sử dụng cả hai phiên bản System32 và SysWOW64 của ODBC Admin và không phiên bản nào hoạt động.

Điều cuối cùng đã hoạt động là khớp phiên bản bit của Java với phiên bản bit của Office. Khi tôi đã làm điều đó, tôi có thể sử dụng chế độ kết nối DSN hoặc DSN ít hơn mà không gặp bất kỳ phiền phức nào.


Tôi ngụ ý điều này từ câu trả lời của Mob, nhưng cảm ơn vì đã xác nhận. Thật là một mớ hỗn độn!
Kevin Bowersox

0

Bạn đã tạo DSN trước trong Pa-nen Điều khiển> Công cụ Quản trị> ODBC> Hệ thống DSN. Đặt tên nó giống như "myDatabase" và nếu tôi đang yêu cầu định vị cơ sở dữ liệu / tệp truy cập, hãy chỉ định đường dẫn bằng tùy chọn duyệt. Khi DSN của bạn sẽ được tạo thành công, bạn sẽ có thể dễ dàng truy cập vào DB của bạn.


Tôi đã tạo DSN của mình bằng ODBC mà tôi tìm thấy trong C: \ Windows \ SysWOW64 ... Cái trong bảng điều khiển gần như không có trình điều khiển nào lưu chúng cho máy chủ sql.
user1028408

thì bạn phải cài đặt các trình điều khiển vì không có các trình điều khiển đó, bạn không thể tạo kết nối ODBC.
Ankur Jain

bạn có liên kết đến những trình điều khiển này không? Tôi đã thử cài đặt một số nhưng chúng không hoạt động.
user1028408


Tôi đã tải xuống những thứ này và thay thế chuỗi kết nối: Connection dbConnection = DriverManager.getConnection ("Driver = {Microsoft Access Driver (*. Mdb, * .accdb)}; DBQ = C: \\ Users \\ Owner \\ Documents \\ myDatabase .mdb "," admin "," "); nhưng nó vẫn mang lại cho tôi rắc rối. Có lẽ tôi cần thay đổi một cái gì đó khác trong mã?
user1028408

0

Nếu bạn đang sử dụng netbeans, hãy truy cập tools-> java Platform, thay đổi jdk_home trỏ đến c: / programfiles / java / jdk1_7 thành c: programFiles (x86) / java / jdk1_6_21

nếu không thể chỉnh sửa, hãy tìm netbeans.cnf và thực hiện thay đổi như abouve đã nêu cho jdk_home. khởi động lại ứng dụng gọn gàng và cách hoạt động của nó.


0

Tôi đã gặp rất nhiều khó khăn khi liên kết với MySQL từ máy tính xách tay 64 bit, chạy Windows 7, sử dụng MS Access 2010. Tôi thấy bài viết trước rất hữu ích, nhưng vẫn không thể kết nối bằng odbc 3.5.1. Vì trước đó tôi đã liên kết một máy 32 bit bằng Trình kết nối / ODBC 5.1.13, tôi đã tải xuống phiên bản đó và thiết lập nó bằng cách sử dụng các hướng dẫn ở trên. Sự thành công. Câu trả lời dường như là thử các phiên bản khác nhau của Connector.odbc.


0

Nếu bạn đang kết nối từ nền tảng 64 bit bằng trình điều khiển 32 bit, hãy chạy C: \ Windows \ SysWOW64 \ odbcad32.exe có thể thực thi và tạo DSN. Nó sẽ hoạt động.


0

Tôi gặp sự cố này khi nâng cấp lên máy chủ windows 7 với một số ứng dụng CLASP cũ. Đang cố gắng chạy ứng dụng 32 bit trên máy 64 bit.

Thử đặt khả năng tương thích của nhóm ứng dụng 32 bit thành True và / hoặc tạo dsn ở 32 và 64 bit.

Mở cửa sổ nguồn dữ liệu odbc trong cả hai phiên bản từ hộp chạy. C: \ Windows \ SysWOW64 \ odbcad32.exe C: \ Windows \ system32 \ odbcad32.exe


0

Tôi đã gặp phải vấn đề này. Điều này là do kiến ​​trúc máy tính của bạn và kiến ​​trúc cơ sở dữ liệu bạn đang sử dụng.

Nếu bạn đang sử dụng hệ điều hành 32 bit thì mọi thứ hoạt động tốt vì bạn chỉ có thể cài đặt phần mềm 32 bit. Vấn đề xảy ra khi bạn đang sử dụng hệ điều hành 64 bit.

Để giải quyết vấn đề này rất đơn giản - tôi đã mất nhiều thời gian để khám phá ra vấn đề này.

  1. Biết Hệ điều hành của bạn là 64 bit nhưng Microsoft Office của bạn là 32 bit.
  2. Vì vậy, để bạn có thể truy cập cơ sở dữ liệu của mình bằng NetBean IDE (giả sử bạn đang sử dụng cái này), bạn cần cài đặt 32 bit JDK. Nếu bạn đã cài đặt 64 bit, bạn phải gỡ cài đặt nó và cài đặt 32 bit.

Bạn không thể truy cập cơ sở dữ liệu của mình vì JVM 64 bit của bạn không giống với JVM 32 bit.

Để thêm cơ sở dữ liệu vào hệ thống của bạn 1. Bảng điều khiển 2. Công cụ quản trị viên 3. Nguồn dữ liệu (ODBC) nhấp chuột phải vào nó thay đổi mục tiêu thành \ sysWOW64 \ odbcad32.exe thay đổi bắt đầu thành r% \ SysWOW64

Sau đó, bạn sẽ có thể chạy. Thông báo cho tôi nếu bạn có bất kỳ vấn đề với điều này.

Cảm ơn bạn!


0

Tôi đã sửa lỗi.

Làm theo các bước:

  1. Cài đặt JDK của phiên bản 32bt
  2. Cài đặt MS-Office 2007
  3. Cấu hình Bảng điều khiển: a. Bảng điều khiển b. Công cụ quản trị viên c. Nguồn dữ liệu (ODBC)

    nhấp chuột phải vào nó thay đổi mục tiêu để \sysWOW64\odbcad32.exethay đổi bắt đầu thànhr%\SysWOW64

Thực hiện nó và May mắn nhất. Hoạt động trong Windows 7 cũng như 8

Loại bỏ phiên bản MS-Office mới hơn và chỉ cài đặt MS-Office 2007 nếu sự cố vẫn tiếp diễn


0

Để giải quyết vấn đề này trước tiên hãy đảm bảo rằng phần mềm java của bạn phải là phiên bản 32bit nếu đó là phiên bản 64 bit rõ ràng nó sẽ hiển thị lỗi không khớp vì vậy hãy cố gắng cài đặt lại 32bit của phiên bản java và thực thi chương trình java bằng lệnh của c:\windows\sysWOW64\odbcad32.exe(dễ nhất sao chép và dán vào hộp thoại chạy) vậy là đủ chương trình của bạn chắc chắn hoạt động


0

tôi nghĩ rằng điều này cũng sẽ hữu ích hơn.

cho trận đấu bỏ lỡ kiến ​​trúc,

tôi chỉ sao chép tệp jdk từ tệp 32 bit C: \ Program Files (x86) \ Java \ jdk1.7.0_71 và dán vào tệp 64 bit C: \ Program Files \ Java \ jdk1.7.0_10, sau đó đổi tên tệp để khớp với tệp bạn thay thế để tránh lỗi IDE (netbeans)

sau đó tốt của bạn để đi.

lưu ý: Bạn nên khóa các tệp 64 bit của mình để khi bạn muốn tạo ứng dụng 64 bit, bạn có thể đưa nó về vị trí của nó


Hacky McHack Hack :(
Gareth

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.